문제상황
QNX 를 통해 remote debugging 으로 GoogleTest를 실행하던 중 오류 발생
실행환경
host : windows
target : QNX SDP 7.0
gtest version : 0.14.0
[build] [ 88%] [32m[1mLinking CXX executable MyTest[0m
[build] C:/Users/yg0585/src/qnx700/host/win64/x86_64/usr/bin/x86_64-pc-nto-qnx7.0.0-ld.exe: cannot find -lregex
[build] collect2.exe: error: ld returned 1 exit status
[build] make[2]: *** [test/MyTest] Error 1
[build] make[1]: *** [test/CMakeFiles/MyTest.dir/all] Error 2
[build] make: *** [all] Error 2
[build] test/CMakeFiles/MyTest.dir/build.make:98: recipe for target 'test/MyTest' failed
[build] CMakeFiles/Makefile2:245: recipe for target 'test/CMakeFiles/MyTest.dir/all' failed
[build] Makefile:135: recipe for target 'all' failed
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/yg0585/src/timer/build --config Debug --target all -j 10 -- exited with code: 2
수정 후 build 과정
문제 원인
QNX SDP 7.0 developer docs 를 살펴보면, regex라이브러리는 libc.a 에 포함되어 있다는 것을 확인할 수 있다. 그러나 위 build 과정을 살펴 보면 cannot find -lregex 라는 문구를 확인할 수 있다.
libc 에 포함되어 있는데 왜 -lregex를 통해 libregex를 link하려 하는지가 문제의 원인인 것 같아서 googletest cmake에서 qnx 관련 의존 코드를 찾았다.
if(CMAKE_SYSTEM_NAME MATCHES "QNX")
target_link_libraries(gtest PUBLIC regex)
endif()
googletest CMakeLists.txt
또한 다음 깃허브 이슈를 확인해 보면, 그 이유를 찾을 수 있다. QNX SDP 7.0 에서 7.1로 넘어가면서 regex가 분리되어서 별도 라이브러리가 되었다고 하고 7.1 공식 문서에서도 해당 부분을 확인할 수 있다. 그래서 googletest 에 QNX환경인지 확인하고 QNX라면 libregex라이브러리를 찾아서 link해주는 코드가 별도로 위와 같이 추가 되었다.
문제 해결
결국 QNX SDP 7.0 이하 버전에서는 따로 regex를 링크해줄 필요가 없다는 것을 의미하기 때문에 regex를 따로 링크하는 부분을 주석 처리 해주었다.
[main] Building folder: timer
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/Users/yg0585/src/timer/build --config Debug --target all -j 10 --
[build] [ 33%] Built target timer
[build] [ 55%] Built target gtest
[build] [ 77%] Built target gtest_main
[build] [ 88%] [32m[1mLinking CXX executable MyTest[0m
[build] [100%] Built target MyTest
[driver] Build completed: 00:00:00.830
[build] Build finished with exit code 0
수정 전 build 과정
결론
QNX SDP 7.0 이하 → regex 링크하는 부분 주석처리
QNX SDP 7.1 이상 → 그대로 사용
'개발 > C++' 카테고리의 다른 글
C++ 에서 Google Test 사용 (0) | 2023.12.22 |
---|---|
C++ RAII (0) | 2023.12.19 |