将自定义boost与CMake链接

将自定义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

我有由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 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
。我更新了问题。