将自定义boost与CMake链接
我有由yum安装的boost 1.53。但我需要构建我的应用程序所需的boost版本1.64。因此,我构建了boost 1.64并安装了前缀将自定义boost与CMake链接,boost,cmake,dynamic-linking,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\u test\u框架的简单boost测试来重现这个问题。但是它链接到正确的Boost版本。当我查看可执行文件的link.txt时,我看到一行: c++ -g
/usr/local
。CMake检测到的增强版本为1.64
(显示的是CMake生成的消息)。但是当我使用ldd
检查时,它的版本是1.53
我试图通过创建一个小项目并创建一个链接到boost::unit\u test\u框架的简单boost测试来重现这个问题。但是它链接到正确的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\u ROOT和Boost\u NO\u SYSTEM\u路径,但无法解决此问题
更新:我发现了问题。原始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\u options
。当我用boost\u program\u options
替换时,它可以工作,但是这个库不是find\u package
的结果,没有查看代码(CMakeLists.txt
),很难找到原因。也许你的LD\u库路径包含/usr/local after/usr?@Tsyvarev,因为安全原因,我不能,我的公司不允许我泄露密码。@arved LD_LIBRARIES_路径为空,无需显示整个代码。准备-小代码,它再现了您的问题(检查!),并将该代码添加到问题帖子中,这样我们也可以检查它。您是否在刚构建的应用程序(在make
之后)或已安装的应用程序(在make install
之后)上运行ldd
?@Tsyvarev我在刚构建的应用程序上运行ldd
。我更新了问题。