问题描述
我正在尝试使用 Cmake 制作我的第一个项目,但我遇到了静态链接到 *.so 库的问题。
我已尝试使用“RPATH 处理”手册中的此语句,但目前还没有使用:
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
target_link_libraries(mt libjack.so "${CMAKE_BINARY_DIR}/lib/librtmidi.so")
与 qmake 相比,我可以将其包含到 pro 文件中:
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN/lib
然后,无论我将二进制文件部署到哪里,一个都将链接到 /lib 文件夹中的库。
谢谢!
解决方法
在 Tsyvarev 的帮助下,无论我在哪里复制它们,我都设法使我的二进制文件与 lib 文件夹静态链接。 对于 CMAKE_INSTALL_RPATH 我放了“lib”(而不是“/lib”) 将此块放在 add_executable 定义之前
...
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
...
add_executable(mtest main.cpp)
...
target_link_libraries(mtest libjack.so "${CMAKE_BINARY_DIR}/lib/librtmidi.so")
...
谢谢!