我在我的项目中使用了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,得到了相同的结果。任何建议都将不胜感激,谢谢!
发布于 2021-02-27 07:48:46
当我要求CMake在构建过程中使用install RPATH时,解决了TL;DR问题
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)更多细节: CMake GTest模块正在运行可执行文件,以枚举在make期间链接的测试(不太确定原因)。这是失败的,因为此时尚未设置安装RPATH。它仅在make install期间设置以克服此问题,您可以要求CMake在构建时添加install RPATH。
https://stackoverflow.com/questions/63402829
复制相似问题