【发布时间】:2020-12-03 18:07:16
【问题描述】:
我正在为我的项目使用 cmake 和 gtest。 我的 gtest 可执行文件使用与程序可执行文件相同的名称。我知道这并不理想,但我无法改变它。
我使用的编译器安装在与系统 GCC(较旧)不同的目录中。 我已经使用以下方法设置了编译器路径:
set(CMAKE_C_COMPILER /opt/gcc-5.4.0/bin/gcc-5.4.0)
set(CMAKE_CXX_COMPILER /opt/gcc-5.4.0/bin/g++-5.4.0)
链接我的可执行文件时,我使用的是 target_link_directories:
target_link_directories(target PUBLIC /opt/gcc-5.4.0/lib /opt/gcc-5.4.0/lib64)
如果没有 gtest,目标可以正常编译、链接和运行,但是添加 gtest 时:
gtest_discover_tests(target WORKING_DIRECTORY <gtests_soruce_dir>)
gtest 目标链接失败:
target: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by executable_name)
target: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by executable_name)
target: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by executable_name)
target: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by executable_name)
CMake Error at /home/gilkalish/.local/share/JetBrains/Toolbox/apps/CLion/ch-0/202.6397.106/bin/cmake/linux/share/cmake-3.17/Modules/GoogleTestAddTests.cmake:40 (message):
Error running test executable.
Path: 'executable_path'
Result: 1
Output:
这是链接 gtest 的最后一步,在链接可执行文件之后。
/usr/bin/cmake3 -D TEST_TARGET=target -D TEST_EXECUTABLE=<target_path>/target -D TEST_EXECUTOR= -D TEST_WORKING_DIR=<test_path> -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=target_TESTS -D CTEST_FILE=target[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -P
我可以使用 LD_LIBRARY_PATH 将路径添加到我的自定义 GCC 库,然后链接工作,但我想找到一个解决方案,允许我在 cmake 中指定在链接测试时查找该库的位置。
还尝试更新到给出相同结果的 cmake 3.18。 任何提示将不胜感激,谢谢!
【问题讨论】:
-
检查您的 make VERBOSE=1 并查看链接行是什么
-
@kobi 使用 VERBOSE=1 我可以看到上面提到的 cmake 命令(最后一个代码部分),而不是实际的链接命令。这只发生在 gtest cmake 模块中。我将深入研究这个 gtest cmake 模块。
-
这很奇怪。您应该会看到一个链接命令。
标签: c++ cmake linker googletest