gcc-7: ошибка: нераспознанный параметр командной строки ‘-m64’

Я пытаюсь скомпилировать код C на Jetson Nano и получаю эту ошибку во время компиляции. Я попытался удалить любое вхождение «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’


person Jen    schedule 04.10.2019    source источник
comment
Похоже, в Makefile есть нечто большее, чем вы здесь показываете? Похоже, кроме -m64 что-то еще добавляет -Wfatal-errors -O0 -g. Есть ли там больше правил Makefile?   -  person Kyrill    schedule 09.10.2019


Ответы (1)


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

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

person jww    schedule 04.10.2019
comment
Спасибо за ваше объяснение! Моя проблема в том, что я нигде не указал -m64, где мне нужно настроить -march=armv8-a, чтобы он работал? - person Jen; 05.10.2019
comment
Это параметры компилятора. Параметры компилятора находятся в CPPFLAGS, CFLAGS и CXXFLAGS. Я думаю, вы бы использовали C_COMPILE_FLAGS и CXX_COMPILE_FLAGS для Cmake. - person jww; 05.10.2019
comment
Я добавил его в флаги, но не повезло. Есть ли вероятность, что он настроен где-то еще или он должен быть где-то в коде? - person Jen; 08.10.2019