CMake链接非编号的库

时间:2012-06-04 14:24:03

标签: cmake

如何指示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的可执行链接。如果我尝试在较旧的计算机上运行此可执行文件,它将失败,因为虽然我知道该库中已存在此功能,但仍无法找到该库。

1 个答案:

答案 0 :(得分:0)

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

您有3个选择:

  1. 使用较旧的提升功能在目标计算机上重新编译。
  2. 与可执行文件一起分发必要的boost库。这可能涉及编写在运行之前设置LD_LIBRARY_PATH的启动脚本。
  3. 链接静态boost库以消除运行时依赖性。在find_package:
  4. 之前使用此行

    SET(Boost_USE_STATIC_LIBS ON)