gpt4 book ai didi

c++ - CMake 测试在 MacOS 上找不到库

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:36 25 4
gpt4 key购买 nike

我有一个带有单元测试的简单库。该库可以构建为静态链接库或动态库。该库为 Windows、Linux 和 MacOS 构建。

该库使用 CMake(带有 Qt)并具有 ctest 单元测试。

这是构建库和调用单元测试的方式:

cmake -DCMAKE_BUILD_TYPE=Debug path/to/sources
cmake --build . --target all
cmake --build . --target test

除 MacOS 外,一切正常。建库时为动态链接库,单元测试找不到库。

    Start 110: UnitTest
110/119 Test #110: UnitTest.................***Exception: Child aborted 0.01 sec
dyld: Library not loaded: library.dylib
Referenced from: /tmp/build/bin/UnitTest
Reason: image not found

直接调用ctest或者直接调用可执行文件都可以。仅当从 cmake 调用测试目标时,单元测试可执行文件未找到该库。

将 DYLD_LIBRARY_PATH 设置为库的位置没有帮助。我使用 install_name_tool 将库的路径更改为绝对路径,从而解决了问题。但是,这只是问题的一个指标,而不是解决方案。

我怀疑 cmake 在调用测试目标时更改了 DYLD_LIBRARY_PATH。这是真的?这应该如何工作?

最佳答案

I suspect cmake changes the DYLD_LIBRARY_PATH when calling the test target. Is this true?

事实上,ctest用于执行您之前在 CMakeLists.txt 中描述的测试,cmakectest 都不会更新 DYLD_LIBRARY_PATH 环境变量.

就是说,如果您想将特定测试与某个环境变量相关联,您可以通过设置 ENVIRONMENT 来实现测试属性。例如:

set_property(TEST ${name} PROPERTY ENVIRONMENT "DYLD_LIBRARY_PATH=/path/to/foo")

为了更好地解决您的问题,我建议您执行以下操作:

  • 指出使用的 CMake 二进制文件的版本
  • 如果可能,请提供一个小示例以重现问题
  • 分享这两个命令的输出:
    • (1) ldd/tmp/build/bin/UnitTest
    • (2) otool -l/tmp/build/bin/UnitTest | grep -A 3 LC_RPATH | grep路径

作为旁注,请考虑指定传递给 cmake 的参数类型,首选 -DCMAKE_BUILD_TYPE:STRING=Debug 而不是 -DCMAKE_BUILD_TYPE=Debug

关于c++ - CMake 测试在 MacOS 上找不到库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51792852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com