如何启用 -mno-outline-atomics AArch64 标志?

How to enable -mno-outline-atomics AArch64 flag?

我一直在尝试交叉编译 AArch64 的开源库。 当我 运行 一个可执行文件在 Raspberry Pi 4(运行 64 位 OS)上链接到这个库时,我得到一个非法指令错误。

我创建了一个 github 问题,库开发人员建议我启用 -mno-outline-atomics 编译器标志(有关 github 问题 here). More details on the flag itself can be found here 的更多详细信息。

所以我编辑了 aarch64 cmake 工具链文件(找到 here)以包含以下内容:

set(CMAKE_C_FLAGS "-march=armv8-a -mno-outline-atomics")
set(CMAKE_CXX_FLAGS "-march=armv8-a -mno-outline-atomics")

但是,当我尝试编译库时,出现以下错误消息:

-- CMAKE_TOOLCHAIN_FILE = /home/cyrus/work/c-sdks/3rd_party_libs/ncnn/toolchains/aarch64-linux-gnu.toolchain.cmake
-- CMAKE_INSTALL_PREFIX = /home/cyrus/work/c-sdks/3rd_party_libs/ncnn/build_aarch64/install
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc
-- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc - broken
CMake Error at /usr/local/share/cmake-3.17/Modules/CMakeTestCCompiler.cmake:60 (message):
  The C compiler

    "/usr/bin/aarch64-linux-gnu-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/cyrus/work/c-sdks/3rd_party_libs/ncnn/build_aarch64/CMakeFiles/CMakeTmp
    
    Run Build Command(s):/usr/bin/make cmTC_65def/fast && /usr/bin/make -f CMakeFiles/cmTC_65def.dir/build.make CMakeFiles/cmTC_65def.dir/build
    make[1]: Entering directory '/home/cyrus/work/c-sdks/3rd_party_libs/ncnn/build_aarch64/CMakeFiles/CMakeTmp'
    Building C object CMakeFiles/cmTC_65def.dir/testCCompiler.c.o
    /usr/bin/aarch64-linux-gnu-gcc   -march=armv8-a -mno-outline-atomics    -o CMakeFiles/cmTC_65def.dir/testCCompiler.c.o   -c /home/cyrus/work/c-sdks/3rd_party_libs/ncnn/build_aarch64/CMakeFiles/CMakeTmp/testCCompiler.c
    aarch64-linux-gnu-gcc: error: unrecognized command line option ‘-mno-outline-atomics’; did you mean ‘-fno-inline-atomics’?
    CMakeFiles/cmTC_65def.dir/build.make:82: recipe for target 'CMakeFiles/cmTC_65def.dir/testCCompiler.c.o' failed
    make[1]: *** [CMakeFiles/cmTC_65def.dir/testCCompiler.c.o] Error 1
    make[1]: Leaving directory '/home/cyrus/work/c-sdks/3rd_party_libs/ncnn/build_aarch64/CMakeFiles/CMakeTmp'
    Makefile:138: recipe for target 'cmTC_65def/fast' failed
    make: *** [cmTC_65def/fast] Error 2

为什么编译器会抱怨这个:unrecognized command line option ‘-mno-outline-atomics’

如何使用 CMake 正确启用标志?

gcc 9.4 添加了 outline-atomic 功能。

-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0

很明显,你的编译器太老了,不支持