我编写了一个使用boost的简单C++程序,我想在具有任何Linux版本(目前)的相同体系结构的机器上部署它,这些机器可能已经安装了一些boost版本。我对部署很陌生,但尝试阅读文档并编写了一个类似于以下内容的CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project( myprog )
FIND_PACKAGE( Boost 1.50 COMPONENTS thread system chrono program_options REQUIRED )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( myprog myprog.cpp )
target_link_libraries( myprog -lpthread -lboost_system -lboost_chrono -lboost_program_options )
INSTALL( TARGETS myprog DESTINATION . )
SET( CPACK_GENERATOR "TGZ")
INCLUDE( CPack )
一切都编译和运行正常,但打包(make package)只打包了可执行文件而没有依赖的boost库".so"
当我运行:ldd myprog时,它告诉我它依赖于:linux-vdso.so,libpthread.so,libboost_system.so,libboost_chrono.so,libboost_program_options.so libstdc++.so libgcc_s.so libc.so librt.so libm.so
这些是我想要打包的共享库(也许我不需要打包标准库)
如何告诉cmake抓取正确的共享对象库,并将它们放在可执行文件旁边,以便用户只需解压文件夹并启动可执行文件而无需安装?
静态链接在这里不是一个选项,因为我会有一堆将使用相同boost库的可执行文件,并且还可能存在与静态链接到libgcc存在许可问题。