【问题标题】:How to add linker directories to cmake gtest_discover_tests如何将链接器目录添加到 cmake gtest_discover_tests
【发布时间】: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


【解决方案1】:

TL;当我要求 CMake 在构建过程中使用 install RPATH 时解决了 DR 问题

set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)

更多细节: 在make 期间链接后,CMake GTest 模块正在运行可执行文件以枚举测试(不太清楚为什么)。这是失败的,因为此时尚未设置安装 RPATH。仅在make install 期间设置 为了克服这个问题,您可以要求 CMake 在构建期间添加安装 RPATH。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2023-04-01
    相关资源
    最近更新 更多