如何使用 CMake 正确设置动态库路径?
How to correctly set dynamic lib path using CMake?
我正在尝试在 Mac 上使用 OpenMP
。
编译后,当运行二进制文件时,
我明白了
dyld: Library not loaded: @rpath/libomp.dylib
Referenced from: ./lab1
Reason: image not found
[1] 64552 trace trap ./lab1
我使用 otool 找出它期望的路径。
otool -L lab1
lab1:
@rpath/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
所需的库 libomp.dylib
位于路径 /usr/local/opt/llvm/lib
。
如何让二进制文件可以找到它?
尝试使用 CMake POST_BUILD
操作将所需路径添加到可执行文件的 rpaths:
add_custom_command(TARGET lab1
POST_BUILD COMMAND
${CMAKE_INSTALL_NAME_TOOL} -add_rpath /usr/local/opt/llvm/lib
$<TARGET_FILE:lab1>)
这仅在 lab1
是使用 add_executable
创建的 CMake 可执行目标时有效。
我正在尝试在 Mac 上使用 OpenMP
。
编译后,当运行二进制文件时,
我明白了
dyld: Library not loaded: @rpath/libomp.dylib
Referenced from: ./lab1
Reason: image not found
[1] 64552 trace trap ./lab1
我使用 otool 找出它期望的路径。
otool -L lab1
lab1:
@rpath/libomp.dylib (compatibility version 5.0.0, current version 5.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
所需的库 libomp.dylib
位于路径 /usr/local/opt/llvm/lib
。
如何让二进制文件可以找到它?
尝试使用 CMake POST_BUILD
操作将所需路径添加到可执行文件的 rpaths:
add_custom_command(TARGET lab1
POST_BUILD COMMAND
${CMAKE_INSTALL_NAME_TOOL} -add_rpath /usr/local/opt/llvm/lib
$<TARGET_FILE:lab1>)
这仅在 lab1
是使用 add_executable
创建的 CMake 可执行目标时有效。