我有一个项目,链接到各种常见的图书馆,以及Boost。在我自己以外的计算机上进行测试已被证明是困难的,因为各种版本的Linux都带有不同版本的Boost。我宁愿避免在每台机器上下载和编译相同版本的Boost。你如何静态链接Boost库?
有没有一种方法可以将我的程序静态链接到Boost库,并且一切正常?我尝试过将静态链接(静态),但这会导致其他问题(即找不到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
EDIT(液):
COUNT0提到的正是我一直在寻找。在Eclipse中,我从Project - > Properties - > C/C++ Build - > Settings - > GCC C++ Linker - > Libraries - > Libraries(-l)中删除了所有Boost库(例如boost_system)。然后,我在Project - > Properties - > C/C++ Build - > Settings - > GCC C++ Linker - > Miscellaneous - > Other Objects下添加了Boost .a文件(例如/usr/lib/libboost_system.a)。我还从链接器标志中删除了“-static”。这产生了一个可执行文件,所有的boost库都是静态链接的,而不是动态链接的。
这就是我一直在寻找的东西!我只是删除了 -static“并添加了.a文件。 – JuiceboxHero 2011-05-04 21:53:39
这是正确的 - 静态必须去,我的坏。 – count0 2011-05-05 14:15:56