0

我正在尝试使用 Cmake 制作我的第一个项目,但我遇到了静态链接到 *.so 库的问题。

我的二进制文件只能从构建文件夹中查看库。

我尝试使用“RPATH handling”手册中的这些语句,但到目前为止它不起作用:

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 文件夹中的库。

谢谢!

4

1 回答 1

1

在 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")
...

谢谢!

于 2021-02-07T22:30:17.137 回答