【问题标题】:Cmake set relative path to binary to 3rd party libraryCmake将二进制文件的相对路径设置为第三方库
【发布时间】:2021-02-07 14:37:29
【问题描述】:

我正在尝试使用 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 文件夹中的库。

谢谢!

【问题讨论】:

  • CMAKE_INSTALL_RPATH 和其他影响 RPATH 的 CMake 变量应该在创建目标 (add_executable) 之前设置,而不是之后 它。参见例如that answer.

标签: c++ cmake rpath target-link-libraries


【解决方案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")
...

谢谢!

【讨论】:

    猜你喜欢
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2020-09-14
    相关资源
    最近更新 更多