你怎么只静态链接Boost库?

问题描述 投票:5回答:2

我有哪个环节对各种公共库,以及加速项目。比我自己以外的计算机上测试这已经被证明是困难的,因为Linux的各种口味来与不同版本的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

编辑(解决方案):

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

boost static hyperlink
2个回答
7
投票

使用升压存档文件(.a文件),而不是共享库文件(又名的.so。连接使用-l)。动态现在要链接的Boost库。写出来可能有助于确保什么是被静态链接和动态内容。

这将是这个样子:

g++ -o"acmserver"  ./src/acmserver.o ... ./src/server.o \
  /usr/local/lib/libboost_system.a /usr/local/lib/boost_filesystem \
  ... -lGL ...

根据不同的gcc版本或平台类型,你可能还需要添加-static`标志。


0
投票

该错误说你的连接没有发现GL库,其中有无关的推动作用。

请确保您有libgl1-mesa-dev或安装在系统上的等效包。

© www.soinside.com 2019 - 2024. All rights reserved.