将自定义Boost与CMake链接

时间:2018-07-25 10:55:00

标签: boost cmake dynamic-linking

我有yum安装的Boost 1.53。但是我需要构建我的应用程序所需的boost版本1.64。因此,我构建了boost 1.64并安装了前缀/usr/local。 CMake检测到的增强版本为1.64(显示为CMake生成的消息)。但是当我使用ldd进行检查时,其版本为1.53

我试图通过创建一个小项目并创建一个链接到Boost::unit_test_framework的简单增强测试来重现该问题。但是它链接到正确的Boost版本。当我查看可执行文件的link.txt时,看到了以下一行:

c++ -g main.cpp.o -o Test -Wl,-rpath,/usr/local/lib /usr/local/lib/libboost_unit_test_framework.so

但是在我的主要项目中,是

c++ -g -o ......  -lnsl -lrt -lboost_program_option -lboost_filesystem -lboost_thread

我通过以下命令检查ld的搜索路径:

$ gcc -m64 -Xlinker --verbose  2>/dev/null | grep SEARCH | sed 's/SEARCH_DIR("=\?\([^"]\+\)"); */\1\n/g'  | grep -vE '^$'

结果是:

/usr/local/lib64
/lib64
/usr/lib64
/usr/local/lib
......

boost 1.53的安装路径为/lib64,而1.64的安装路径为/usr/local/lib。所以我认为测试版本是正确的,因为指定了boost的绝对路径。而且,如果未指定绝对路径,则ld将使用版本1.53,因为它位于第一个位置。

我尝试设置BOOT_ROOT和Boost_NO_SYSTEM_PATHS,但无法解决此问题。

更新:我发现了问题。原始的cmake文件如下所示:

find_package(Boost 1.64 REQUIRED COMPONENTS program_options)
target_link_library(MyProgram PRIVATE Boost::program_options) #original cmake
#target_link_library(MyProgram PRIVATE boost_program_options) #my cmake
#target_link_library(MyProgram PRIVATE ${Boost_LIBRARIES}) #fixed cmake

我修复了cmake,因为无法使用原始cmake 运行cmakecmake告诉我在我的计算机上找不到Boost:program_options。当我用boost_program_options替换时,它可以工作,但是该库不是find_package的结果。

0 个答案:

没有答案