cnd*_*cnd 26 c cmake cross-compiling
用于ARM目标系统的cmake(在Windows上)的编译选项,但是当我运行configure时,它开始编译器测试:
CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
The C compiler "D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" is not
able to compile a simple test program.
It fails with the following output:
Change Dir: D:/merge/complex/build/CMakeFiles/CMakeTmp
Run Build Command:D:/PROGRA~1/YAGART~1/bin/make.exe "cmTryCompileExec/fast"
D:/PROGRA~1/YAGART~1/bin/make.exe -f
CMakeFiles/cmTryCompileExec.dir/build.make
CMakeFiles/cmTryCompileExec.dir/build
make.exe[1]: Entering directory
`D:/merge/complex/build/CMakeFiles/CMakeTmp'
"D:/Program Files/CMake 2.8/bin/cmake.exe" -E cmake_progress_report
D:/merge/complex/build/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o
"D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" -o
CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o -c
D:/merge/complex/build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTryCompileExec
"D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe"
"CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o" -o cmTryCompileExec
-rdynamic
arm-none-eabi-gcc.exe: error: unrecognized option '-rdynamic'
make.exe[1]: *** [cmTryCompileExec] Error 1
Run Code Online (Sandbox Code Playgroud)
使用Yagatdo 4.6.*交叉编译工具链
如何跳过此测试或修复我得到的-dynamic错误?
Fra*_*ser 26
您可以通过添加NONE到您的project呼叫来跳过编译器检查:
project(<projectname> NONE)
Run Code Online (Sandbox Code Playgroud)
但这可能会产生非常深远的影响.有关详细信息,请运行
cmake --help-command project
Run Code Online (Sandbox Code Playgroud)
我不熟悉ARM,所以这可能不是你最好的选择.我想你会更好地看看是否有办法解决这个问题-rdynamic.
看起来这被认为是一个有效仍未解决的错误.错误报告中的注释提到添加以下行作为解决方法(可能在您的project调用之前):
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
Run Code Online (Sandbox Code Playgroud)
Ann*_*sum 23
看起来你的目标实际上不是Linux,所以你应该告诉cmake你正在为通用案例进行交叉编译:
SET(CMAKE_SYSTEM_NAME Generic)
Run Code Online (Sandbox Code Playgroud)
接下来(可选,但很好指定):
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_CROSSCOMPILING 1)
Run Code Online (Sandbox Code Playgroud)
但是,如果你指定(你可能会这样做,因为在网上很多例子中说明了这一点):
SET(CMAKE_SYSTEM_NAME Linux)
Run Code Online (Sandbox Code Playgroud)
然后cmake将从(假设版本2.8)加载配置文件文件:
/usr/share/cmake-2.8/Modules/Platform/Linux.cmake
Run Code Online (Sandbox Code Playgroud)
从中可能加载:
/usr/share/cmake-2.8/Modules/Platform/Linux-GNU.cmake
Run Code Online (Sandbox Code Playgroud)
这里的-rdynamic标志是出于历史原因设置的:
macro(__linux_compiler_gnu lang)
# We pass this for historical reasons. Projects may have
# executables that use dlopen but do not set ENABLE_EXPORTS.
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic")
endmacro()
Run Code Online (Sandbox Code Playgroud)
确实通过指定NONE为PROJECT参数来完成禁用测试,而不是设置CMAKE_SYSTEM_NAME(Linux例如,除了之外的其他东西Generic)是你真正想要做的事情.
adi*_*iog 23
您可以设置标志CMAKE_ <LANG> _COMPILER_WORKS,例如:
set(CMAKE_C_COMPILER_WORKS 1)
Run Code Online (Sandbox Code Playgroud)
抑制进一步的编译器检查.
如果你只是编译一个静态库,并且你想避免让 CMake 测试编译器可以生成二进制文件,你可以设置变量CMAKE_TRY_COMPILE_TARGET_TYPE.
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22170 次 |
| 最近记录: |