【问题标题】:different link and load library paths using cmake使用 cmake 的不同链接和加载库路径
【发布时间】:2017-06-26 22:10:35
【问题描述】:

我有同一个库libabc.so 的两个版本,我必须将我的程序链接到一个版本,并在执行时加载另一个版本(加载程序在运行可执行文件时应该加载另一个库)。

我将两个版本放在不同的路径中,如何使用 cmake 指定?

我希望我已经说清楚了,谢谢。

【问题讨论】:

  • load another version when it's executed. - 你的意思是 loader 应该在运行可执行文件时加载 another 库吗?不确定 CMake 是否会以一般方式提供帮助。但是,如果两个库文件具有相同的名称但位置不同,那么您可以调整 RPATH 以实现该目标。顺便说一句,.o 文件通常是 目标文件,而不是
  • @Tsyvarev 非常感谢,实际上我是 C++ 的新手,我相信你是对的,loader should load another library when executable is run,是的,它们同名,.o 是一个错字,谢谢!
  • 那么您可能想了解RPATH handling in CMake

标签: c++ path cmake linker load


【解决方案1】:

@Tsyvarev 的 cmets 基本上给出了答案,这里再详细一点。

说链接和加载的两个版本放在link_path/libabc.soload_path/libabc.soCMakeLists.txt应该是这样的

...
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH load_path;${CMAKE_INSTALL_RPATH})  # load path

...
target_link_libraries(xxx link_path/libabc.so)  # link path

【讨论】:

    猜你喜欢
    • 2012-04-22
    • 2013-12-24
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    相关资源
    最近更新 更多