如何解决如何将链接器目录添加到cmake gtest_discover_tests
我在项目中使用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,得到相同的结果。 任何提示将不胜感激,谢谢!
解决方法
TL;DR 问题在我要求 CMake 在构建过程中使用安装 RPATH 时解决了
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
更多细节:
CMake GTest 模块正在运行可执行文件以在 make
期间链接后枚举测试(不太清楚为什么)。这是失败的,因为此时尚未设置安装 RPATH。它仅在 make install
期间设置
为了克服这个问题,您可以要求 CMake 在构建期间添加安装 RPATH。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。