如何仅静态链接Boost库?

如何仅静态链接Boost库?,boost,static,hyperlink,Boost,Static,Hyperlink,我有一个项目,它链接了各种常见的库以及Boost。事实证明,在我自己的计算机之外的其他计算机上测试这一点很困难,因为不同版本的Boost附带了不同的Linux版本。我更愿意避免在每台机器上下载和编译相同版本的Boost 有没有一种方法可以将我的程序静态链接到Boost库,并使其他所有程序正常链接?我尝试过静态链接所有内容(-static),但这会导致其他问题(即找不到lGL)。有没有其他可能的方法,我可以用我的程序只打包必要的动态库(比如说和可执行文件放在同一个文件夹中)并以这种方式分发它 尝试

我有一个项目,它链接了各种常见的库以及Boost。事实证明,在我自己的计算机之外的其他计算机上测试这一点很困难,因为不同版本的Boost附带了不同的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库(例如,BooStYSUpLoad)表单Projy-> Projt:C+C++ Buff->设置-> GCC C++链接器>库->库(-L)。然后,我在BooT-Projt:Projt>属性> -C/C++ +构建->设置> GCC C++链接器>杂项>其他对象下添加了Booost。我还从链接器标志中删除了“-static”。这产生了一个可执行文件,其中所有boost库都是静态链接而不是动态链接的。

该错误表示链接器未找到GL库,而GL库与boost无关


确保您的系统上安装了
libgl1 mesa dev
或等效软件包。

使用boost存档文件(.a文件),而不是共享的lib文件(.so aka.linking with-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`标志。

我的位置是:
/usr/lib/libGL。因此
是的,先生,它已安装。动态链接时,一切正常。但是当我在那里抛出-static标志时,它失败了,出现了上面的错误。这就是为什么我只想静态链接Boost,而不用担心lGL。如果它安装在系统上,在编译行中添加到库的路径,它会变成这样:
-L/usr/lib-lGL
,这正是我想要的!我只需要删除-static并添加.a文件。好吧,请从接受的答案中删除它,以供将来的访问者使用;)