首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CMake、链接目录和多个Boost安装

CMake、链接目录和多个Boost安装
EN

Stack Overflow用户
提问于 2014-11-28 16:07:02
回答 1查看 1.5K关注 0票数 3

我在一个没有根权限的服务器上工作。我有一个简单的命令行应用程序,它链接到OpenCV和Boost,我使用的是cmake2.8.12。在/usr/lib64 64中有旧的boost库,但是我希望使用更新的boost库,可以使用环境模块加载这些库。CMakeLists.txt文件如下:

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 2.8.12)

find_package(Boost 1.55.0 REQUIRED COMPONENTS program_options system thread)
find_package(OpenCV REQUIRED)

message("Boost dirs: ${Boost_LIBRARY_DIRS} ${Boost_INCLUDE_DIRS}")
message("Boost libraries ${Boost_LIBRARIES}")

include_directories(${OpenCV_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${Boost_LIBRARY_DIRS}")

add_executable(tile_images src/tile_images.cpp)
target_link_libraries(tile_images ${OpenCV_LIBRARIES} ${Boost_LIBRARIES} )

这些消息打印正确库的完整路径:

Boost dirs: /cm/shared/app/boost/1.56/lib/cm/shared/app/boost/1.56/ Boost库/cm/shared/apps/boost/1.56/lib/libboost_program_options.so;/cm/shared/apps/boost/1.56/lib/libboost_system.so;/cm/shared/apps/boost/1.56/lib/libboost_thread.so

当链接发生问题时,cmake将生成对c++的以下调用:

/usr/bin/c++ CMakeFiles/tile_images.dir/src/tile_images.cpp.o -o tile_images -rdynamic /cm/shared/apps/opencv/2.4.9/lib/libopencv_video.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_ts.a /cm/shared/apps/opencv/2.4.9/lib/libopencv_superres.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_stitching.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_photo.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_ocl.so.2.4.9 /cm/shared/app/opencv/2.4.9/lib/libopencv_objtect.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_nonfree.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_ml.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_legacy.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_imgpro.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_highgui.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_gpu.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_flann.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/cm/shared/apps/opencv/2.4.9/lib/libopencv_core.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_contrib.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_calib3d.so.2.4.9 -lboost_program_options -lboost_system -lboost_thread -ldl -lm -lpthread/cm/shared/apps/opencv/2.4.9/lib/libopencv_nonfree.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_ocl.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_gpu.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_photo.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_objdetect.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_legacy.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_video.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_ml.so.2.4.9 /cm/共享/应用程序/opencv/2.4.9/lib/libopencv_杯3d.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_features2d.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_highgui.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_imgproc.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_flann.so.2.4.9 /cm/shared/apps/opencv/2.4.9/lib/libopencv_core.so.2.4.9

请注意,boost库的绝对路径是如何被删除的,并且不包括使用-L标志。然后我收到以下警告,暗示链接器正在/usr/lib64 64中拾取另一个老版本的boost安装。

/usr/bin/ld:警告: /cm/shared/apps/boost/1.56/lib/libboost_thread.so,需要的libboost_system.so.1.56.0可能与libboost_system.so.5冲突

然后链接失败,错误列表很长,可能是因为使用了旧的Boost库,但是代码是用更新的Boost头构建的。

如果我在CMakeLists.txt中添加以下内容:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${Boost_LIBRARY_DIRS}")

然后,代码链接没有问题。我花了一些时间进行研究,但到目前为止,对于如何让CMake包含-L标志或如何阻止它从boost库中剥离绝对路径,我已经画了一个空白。任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-28 16:40:57

我相信文档set(Boost_REALPATH ON)解释了这一点。

Boost_REALPATH -设置为ON以解析已发现的库的符号链接,以帮助打包。例如,"system“组件库可能被解析为"/usr/lib/libboost_system.so.1.42.0”,而不是"/usr/lib/libboost_system.so“。这不影响链接,除非用户需要此信息,否则不应启用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27192401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档