【发布时间】:2018-08-10 19:17:50
【问题描述】:
我有一个带有单元测试的简单库。该库可以构建为静态链接库或动态库。该库适用于 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。这是真的?这应该如何工作?
【问题讨论】: