1

如何指示 CMake 链接到库的非编号版本?例如,当使用 Boost 库时,我有:

find_package(Boost COMPONENTS regex program_options REQUIRED)
target_link_libraries(main ${Boost_PROGRAM_OPTIONS_LIBRARY})

以及针对 libboost_program_options.so.1.49.0 的可执行链接。如果我尝试在旧机器上运行此可执行文件,它将失败,因为找不到该库,尽管我知道该功能已存在于该库版本中。

4

1 回答 1

0

那是行不通的。即使功能在那里,确切的 API 也可能不在那里。这就是为什么 UNIX 链接系统使用符号链接,以便链接器访问未编号的符号链接,然后在写出依赖项列表时取消引用它,以便在运行时需要相同的主要版本。

您有 3 个选择:

  1. 使用较旧的 bo​​ost 在目标机器上重新编译。
  2. 分发必要的 boost 库以及您的可执行文件。这可能涉及编写一个在运行之前设置 LD_LIBRARY_PATH 的启动脚本。
  3. 链接到静态增强库以消除您的运行时依赖性。在 find_package 之前使用这一行:

SET(Boost_USE_STATIC_LIBS ON)

于 2012-06-05T14:51:36.273 回答