GCC-7:错误:无法识别的命令行选项"-M64"

gcc-7: error: unrecognized command line option ‘-m64’

本文关键字:quot 选项 -M64 命令行 错误 识别 GCC-7      更新时间:2023-10-16

我正在尝试在 Jetson Nano 上编译 C 代码,但在编译过程中出现此错误。我尝试删除任何出现的"m -64",但它似乎是自动添加的。这是它失败的cmd:/usr/bin/gcc-7 -Wall -Wextra -Wconversion -pedantic -Wshadow -m64 -Wfatal-errors -O0 -g -o CMakeFiles/dir/testCCompiler.c.o -c /home/user/dir/CMakeFiles/CMakeTmp/testCCompiler.c

uname -a: Linux jetson-nano 4.9.140-tegra aarch64 aarch64 aarch64 GNU/Linux
gcc-7 -v: Using built-in specs.
COLLECT_GCC=gcc-7
COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/7/lto-wrapper
Target: aarch64-linux-gnu
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)
CMAKE_C_COMPILER = gcc-7
CMAKE_CXX_COMPILER = g++-7
CXX_COMPILE_FLAGS =  "-Wall -Werror -Wextra -Wnon-virtual-dtor -Wconversion -Wold-style-cast -pedantic -Wshadow"
C_COMPILE_FLAGS = "-Wall -Wextra -Wconversion -pedantic -Wshadow"

GCC-7:错误:无法识别的命令行选项"-m64">

错误:无法识别的命令行选项'-m64'

我相信你正在寻找-march=armv8-a(和朋友(,而不是-m64.GCC arm64 选项可在手册中的 3.18.1 AArch64 选项中找到。

Aarch64 在基本规范中包含 ASIMD,因此不需要额外的回旋。ASIMD是"高级SIMD指令">,它是ARM在Aarch32和Aarch64架构上所说的NEON。

如果要启用扩展,例如CRC或Crypto,则该选项将看起来像-march=armv8.1-a+crc-march=armv8.1-a+crypto-march=armv8.1-a+crc+crypto


等效的 x86 选项如下。显然,GCC 的 ARM 端口与 x86 使用的型号不同。这对新用户来说是令人困惑的(或者对我来说是令人困惑的(。

  • -march=armv8-a-msse2
  • -march=armv8.1-a+crc-msse2 -msse4.1
  • -march=armv8.1-a+crypto-msse2 -mpclmul -maes
  • -march=armv8.1-a+crc+crypto-msse2 -msse4.1 -mpclmul -maes

ARM 指令集在加密中包含 SHA,因此 x86 选项可能应该包括-msha。问题是,x86 SHA 直到无携带乘法和 AES 大约 8 年后才出现。

此外,GCC ARM编译器通常不理解-march=native。在较旧的 GCC 编译器上,编译器只会崩溃。在中档GCC上,它被简单地忽略了。我相信最新的GCC编译器会尊重它。

此错误经常发生在使用 Rust/Cargo 交叉编译时,因为 Cargo 不够智能,无法自行找到交叉构建工具。

您需要设置适当的环境变量。在示例中,将x86_64_unknown_linux_gnu替换为您的目标,以及指向交叉构建路径的路径(该示例适用于 Debian(。请注意,环境变量区分大小写且名称不一致!

# for the cc crate
export HOST_CC=gcc
export CC_x86_64_unknown_linux_gnu=/usr/bin/x86_64-linux-gnu-gcc
# for Cargo
export CARGO_TARGET_X86_64-UNKNOWN-LINUX-GNU_LINKER=/usr/bin/x86_64-linux-gnu-gcc

在arm64机器或容器上,安装x86_64-linux-gnu-gcc,debian:bookworm是我正在使用的。

# apt-get install g++-x86-64-linux-gnu libc6-dev-amd64-cross

也许您需要安装其他amd64库

# dpkg --add-architecture amd64 
# apt-get update
# apt-get install libjpeg-dev:amd64

对于 M1/M2,如果要编译 x86,x86_64,请执行以下操作:

x86_64-linux-gnu-gcc -o hello_x64 -m64 hello.c
x86_64-linux-gnu-gcc -o hello_x32 -m32 hello.c