gcc-7: ошибка: нераспознанная опция командной строки '-m64' - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь скомпилировать код C на Jetson Nano, и я получаю эту ошибку во время компиляции. Я попытался удалить любое вхождение 'm -64', но кажется, что оно добавлено автоматически. Это команда, в которой происходит сбой: /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'

1 Ответ

2 голосов
/ 05 октября 2019

ошибка: нераспознанная опция командной строки '-m64'

Я полагаю, вы ищете -march=armv8-a (и друзей), а не -m64. Опции GCC arm64 доступны в руководстве 3.18.1 AArch64 в руководстве.

Aarch64 включает ASIMD в базовую спецификацию, поэтому для него не требуется никаких дополнительных вращений. ASIMD - это «Расширенные инструкции SIMD» , и именно это ARM называет NEON в архитектурах Aarch32 и Aarch64.

Если вы хотите включить расширения, такие как CRC или Crypto, то опциявыглядят как -march=armv8.1-a+crc или -march=armv8.1-a+crypto или -march=armv8.1-a+crc+crypto.


Эквивалентные параметры x86 будут следующими. Очевидно, что ARM-порт GCC не использует ту же модель, что и 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 не прибыл примерно через 8 лет после переноса умножения и AES.

Кроме того, компиляторы GCC ARM обычно не понимают -march=native. На старых компиляторах GCC компилятор просто зависает. На GCC среднего уровня это просто игнорируется. Я полагаю, что последние компиляторы GCC чтят это.

...