我有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 运行cmake
。 cmake
告诉我在我的计算机上找不到Boost:program_options
。当我用boost_program_options
替换时,它可以工作,但是该库不是find_package
的结果。