cmake 컴파일러 테스트를 건너뛰거나 "error: 인식할 수 없는 옵션 '-rdynamic'을 피할 수 있습니까?"
ARM 대상 시스템용 cmake(윈도우)의 컴파일 옵션이지만 실행 시 컴파일러 테스트를 시작합니다.
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
Yagatdo 4.6.* 교차 컴파일 도구 체인 사용
이 테스트를 건너뛰거나 -rdynamic 오류를 수정하려면 어떻게 해야 합니까?
설정할 수 있습니다.CMAKE_<LANG>_COMPILER_WORKS
해당 언어에 대한 추가 컴파일러 검사를 억제하려면 true를 선택합니다.
set(CMAKE_C_COMPILER_WORKS 1)
다음을 추가하여 컴파일러 검사를 건너뛸 수 있습니다.NONE
당신에게project
호출:
project(<projectname> NONE)
하지만 이것은 꽤 광범위한 영향을 미칠 수 있습니다.전체 세부 정보를 보려면 실행
cmake --help-command project
저는 ARM에 대해 잘 모르기 때문에 이것은 아마도 당신의 최선의 선택이 아닐 것입니다.제 생각에 당신은 그것을 고칠 방법이 있는지 보는 것이 좋을 것 같습니다.-rdynamic
깃발
편집:
이것은 사실상 아직 해결되지 않은 버그로 확인된 것으로 보입니다.버그 보고서의 의견은 해결책으로 다음 행을 추가하는 것을 언급합니다(아마도 당신의 이전에).project
호출):
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
실제로 Linux가 아닌 다른 것을 목표로 하는 것 같으니, 일반적인 경우에 대해 교차 컴파일 중이라고 cmake에 말해야 합니다.
SET(CMAKE_SYSTEM_NAME Generic)
다음 순서(선택 사항이지만 지정하기에 좋습니다):
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_CROSSCOMPILING 1)
그러나 지정한 경우(온라인의 많은 예에 나와 있기 때문에 가능성이 있음):
SET(CMAKE_SYSTEM_NAME Linux)
그런 다음 cmake가 파일(버전 2.8로 가정)에서 구성 파일을 로드합니다.
/usr/share/cmake-2.8/Modules/Platform/Linux.cmake
로드될 가능성이 있는 위치:
/usr/share/cmake-2.8/Modules/Platform/Linux-GNU.cmake
자, 여기서-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()
다음을 지정하여 실제로 수행되는 것처럼 테스트를 비활성화하는 대신NONE
처럼PROJECT
논쟁, 그것은 설정하는 것처럼 보입니다.CMAKE_SYSTEM_NAME
(다른 곳으로)Linux
,예를 들어.Generic
)가 실제로 원하는 것입니다.
정적 라이브러리를 컴파일할 때 컴파일러가 이진 파일을 생성할 수 있는 CMake 테스트를 수행하지 않으려면 변수를 설정할 수 있습니다.
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
-rdynamic 옵션이 없는 Windows용 크로스 컴파일 시 다음을 사용할 수 있습니다.
-DCMAKE_SYSTEM_NAME="Windows"
씨마케와 함께.그러면 Cmake는 -rdynamic으로 테스트를 건너뜁니다.
언급URL : https://stackoverflow.com/questions/10599038/can-i-skip-cmake-compiler-tests-or-avoid-error-unrecognized-option-rdynamic
'programing' 카테고리의 다른 글
시간을 밀리초 단위로 찾으시겠습니까? (0) | 2023.08.14 |
---|---|
도커 MariaDB, phpmyadmin mysqli:: real_connect(): (HY000/2002): php_network_getaddrinfo: getaddrinfo 실패:이름이 확인되지 않습니다. (0) | 2023.08.14 |
openpyxl을 사용하여 열 삽입 (0) | 2023.08.14 |
python: OperationalError: near "%: 구문 오류 (0) | 2023.08.14 |
JavaScript를 사용하여 'div' 상단에서 창 상단까지의 거리 결정 (0) | 2023.08.14 |