我有一個項目,鏈接到各種常見的圖書館,以及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