NVIDIA Jetson TX2 中无法识别的命令行选项“-m64”
unrecognised command line option '-m64' in NVIDIA Jetson TX2
我使用的是 NVIDIA Jetson TX2。我正在尝试使用 "make" 为 DynamixelSDK 生成一个“.so”文件。但我收到此错误:
mkdir -p ./.objects/
gcc -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c -I../../include/dynamixel_sdk -m64 -fPIC -g -c ../../src/dynamixel_sdk/group_bulk_read.c -o .objects/group_bulk_read.o
gcc: error: unrecognized command line option ‘-m64’
Makefile:114: recipe for target '.objects/group_bulk_read.o' failed
make: *** [.objects/group_bulk_read.o] Error 1
您可以在以下位置访问生成文件 - https://pastebin.com/zz9MNnqp
这是 MakeFile 的一部分:
#---------------------------------------------------------------------
# C COMPILER, COMPILER FLAGS, AND TARGET PROGRAM NAME
#---------------------------------------------------------------------
DIR_DXL = ../..
DIR_OBJS = ./.objects
INSTALL_ROOT = /usr/local
MAJ_VERSION = 2
MIN_VERSION = 0
REV_VERSION = 0
TARGET = libdxl_x64_c.so
TARGET1 = $(TARGET).$(MAJ_VERSION)
TARGET2 = $(TARGET).$(MAJ_VERSION).$(MIN_VERSION)
TARGET3 = $(TARGET).$(MAJ_VERSION).$(MIN_VERSION).$(REV_VERSION)
CHK_DIR_EXISTS = test -d
PRINT = echo
STRIP = strip
AR = ar
ARFLAGS = cr
LD = g++
LDFLAGS = -shared -fPIC $(FORMAT)#-Wl,-soname,dxl
LD_CONFIG = ldconfig
CP = cp
CP_ALL = cp -r
RM = rm
RM_ALL = rm -rf
SYMLINK = ln -s
MKDIR = mkdir
CC = gcc
CX = g++
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
FORMAT = -m64
INCLUDES += -I$(DIR_DXL)/include/dynamixel_sdk
#---------------------------------------------------------------------
尝试了 MakeFile 的 32 位和 64 位版本(linux)。
我不知道如何解决这个错误。任何帮助将不胜感激。
makefile 假设目标是 x86-64 架构。作为第一步,您可以简单地从 FORMAT
行中删除 -m64
选项,以便进一步构建。但是,如果项目从未移植到其他架构,则很可能存在其他目标依赖项。
这个错误通常在march
时出现,即目标机器的架构定义不正确。 -m64
行表示它正在为 64 位架构编译。如果您看到 32 位的 Makefile,它将是 -m32
.
尝试更改 makefile,使其内容类似于:
...
FORMAT = -march=armv8-a+crypto -mcpu=cortex-a57+crypto
....
这是行军通常用于Jetson TX2。
此外,对于 TX2,要记住的 GCC 选项是:
- 使用最新的 GCC 工具链 7.2
- 使用 CLANG llvm 前端替代 GCC
- -march=armv8.a+crypto+simd,这会启用 SIMD、加密和浮点指令集,可能会有所帮助。
我使用的是 NVIDIA Jetson TX2。我正在尝试使用 "make" 为 DynamixelSDK 生成一个“.so”文件。但我收到此错误:
mkdir -p ./.objects/
gcc -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c -I../../include/dynamixel_sdk -m64 -fPIC -g -c ../../src/dynamixel_sdk/group_bulk_read.c -o .objects/group_bulk_read.o
gcc: error: unrecognized command line option ‘-m64’
Makefile:114: recipe for target '.objects/group_bulk_read.o' failed
make: *** [.objects/group_bulk_read.o] Error 1
您可以在以下位置访问生成文件 - https://pastebin.com/zz9MNnqp
这是 MakeFile 的一部分:
#---------------------------------------------------------------------
# C COMPILER, COMPILER FLAGS, AND TARGET PROGRAM NAME
#---------------------------------------------------------------------
DIR_DXL = ../..
DIR_OBJS = ./.objects
INSTALL_ROOT = /usr/local
MAJ_VERSION = 2
MIN_VERSION = 0
REV_VERSION = 0
TARGET = libdxl_x64_c.so
TARGET1 = $(TARGET).$(MAJ_VERSION)
TARGET2 = $(TARGET).$(MAJ_VERSION).$(MIN_VERSION)
TARGET3 = $(TARGET).$(MAJ_VERSION).$(MIN_VERSION).$(REV_VERSION)
CHK_DIR_EXISTS = test -d
PRINT = echo
STRIP = strip
AR = ar
ARFLAGS = cr
LD = g++
LDFLAGS = -shared -fPIC $(FORMAT)#-Wl,-soname,dxl
LD_CONFIG = ldconfig
CP = cp
CP_ALL = cp -r
RM = rm
RM_ALL = rm -rf
SYMLINK = ln -s
MKDIR = mkdir
CC = gcc
CX = g++
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
FORMAT = -m64
INCLUDES += -I$(DIR_DXL)/include/dynamixel_sdk
#---------------------------------------------------------------------
尝试了 MakeFile 的 32 位和 64 位版本(linux)。
我不知道如何解决这个错误。任何帮助将不胜感激。
makefile 假设目标是 x86-64 架构。作为第一步,您可以简单地从 FORMAT
行中删除 -m64
选项,以便进一步构建。但是,如果项目从未移植到其他架构,则很可能存在其他目标依赖项。
这个错误通常在march
时出现,即目标机器的架构定义不正确。 -m64
行表示它正在为 64 位架构编译。如果您看到 32 位的 Makefile,它将是 -m32
.
尝试更改 makefile,使其内容类似于:
...
FORMAT = -march=armv8-a+crypto -mcpu=cortex-a57+crypto
....
这是行军通常用于Jetson TX2。
此外,对于 TX2,要记住的 GCC 选项是:
- 使用最新的 GCC 工具链 7.2
- 使用 CLANG llvm 前端替代 GCC
- -march=armv8.a+crypto+simd,这会启用 SIMD、加密和浮点指令集,可能会有所帮助。