2014-08-31 69 views
0

我剛纔試圖編譯靜態libboost系統庫我的小測試應用程序,例如:爲什麼在使用靜態庫進行編譯之後可執行文件增長如此之多?

$ g++ -I ~/lib/boost-1.56/include main.cpp -o main -L~/lib/boost-1.56/lib/ -static -lboost_system 

在此之前,我已經編譯沒有靜態庫:

$ g++ -I ~/lib/boost-1.56/include main.cpp -o main -L~/lib/boost-1.56/lib/ -lboost_system 

的大小差異的方法大於庫版本之間的大小差異:

  • 動態鏈接 - 40K
  • 靜態鏈接 - 1.6M

libboost圖書館~/lib/boost-1.56/lib

-rw-rw-r-- 1 USER USER 218K sie 31 14:44 libboost_filesystem.a 
lrwxrwxrwx 1 USER USER 29 sie 31 14:43 libboost_filesystem.so -> libboost_filesystem.so.1.56.0 
-rwxrwxr-x 1 USER USER 115K sie 31 14:43 libboost_filesystem.so.1.56.0 
-rw-rw-r-- 1 USER USER 49K sie 31 14:44 libboost_system.a 
lrwxrwxrwx 1 USER USER 25 sie 31 14:43 libboost_system.so -> libboost_system.so.1.56.0 
-rwxrwxr-x 1 USER USER 20K sie 31 14:43 libboost_system.so.1.56.0 

爲什麼會出現在大小如此巨大的差異?

回答

4

靜態庫意味着它不是鏈接到外部庫文件的可執行文件(在Windows上它們是DLL),它們現在被集成到您的實際可執行文件中。如果您不想單獨分發DLL,這是一件好事,但它也完全浪費了DLL的好處,例如能夠單獨交換它們,而不是重新分發所有應用程序,以及讓多個應用程序只使用存儲在系統中一個地方的通用代碼。

考慮到Boost有多大,你的可執行文件有多大就不足爲奇了。

相關問題