你如何静态链接Boost库?

Jui*_*ero 6 static boost hyperlink

我有一个项目链接各种常见的库,以及Boost.由于各种版本的Linux都带有不同版本的Boost,因此在我自己以外的计算机上进行测试已经证明是困难的.我宁愿避免在每台机器上下载和编译相同版本的Boost.

有没有办法将我的程序静态链接到Boost库并将其他所有内容正常链接?我已尝试静态链接所有内容(-static),但这会导致其他问题(即找不到lGL).还有另一种可能的方法,我只能用我的程序打包必要的动态库(比如在与可执行文件相同的文件夹中)并以这种方式分发它吗?

尝试静态链接所有内容时出现链接错误:

g++ -static -o"acmserver"  ./src/acmserver.o ./src/airplane.o ./src/bullet.o ./src/control.o ./src/detail.o ./src/game.o ./src/gamelog.o ./src/gamelogitem.o ./src/guns.o ./src/map.o ./src/missile.o ./src/missilepod.o ./src/object.o ./src/server.o   -lboost_system -lboost_filesystem -lboost_thread -lboost_serialization -lboost_date_time -lpthread -lGLU -lGL
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status
make: *** [acmserver] Error 1
Run Code Online (Sandbox Code Playgroud)

编辑(解决方案):

count0提到了我正在寻找的东西.在Eclipse我除去所有Boost库(例如,boost_system)形式项目 - >属性 - > C/C++编译 - >设置 - > GCC C++链接 - >库 - >库(-1).然后我项目下加入.a文件的升压(例如,/usr/lib/libboost_system.a) - >属性 - > C/C++编译 - >设置 - > GCC C++链接器 - >杂 - >其它物体.我还从链接器标志中删除了"-static".这产生了一个可执行文件,所有的boost库都是静态链接而不是动态链接.

cou*_*nt0 7

使用boost 存档文件(.a文件)而不是共享库文件(.so aka.链接-l).您现在正在动态链接这些boost库.写出来可能有助于确保静态链接和动态链接的内容.

这看起来像:

g++ -o"acmserver"  ./src/acmserver.o ... ./src/server.o \
  /usr/local/lib/libboost_system.a /usr/local/lib/boost_filesystem \
  ... -lGL ...
Run Code Online (Sandbox Code Playgroud)

根据gcc版本或平台类型,您可能还需要添加-static`标志.

  • 这正是我一直在寻找的!我只需删除 -static”并添加 .a 文件。 (2认同)