2012-06-04 45 views
1

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

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

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

回答

0

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

你有3种选择:

  1. 重新编译你的目标机器上与旧的推动作用。
  2. 与您的可执行文件一起分发必要的增强库。这可能涉及编写运行前设置LD_LIBRARY_PATH的启动脚本。
  3. 与静态boost库链接以消除您的运行时依赖关系。 find_package前使用此行:

SET(Boost_USE_STATIC_LIBS ON)