在使用静态库编译后,为什么可执行文件会增长如此之多?

时间:2014-08-31 13:18:23

标签: c++ boost static-linking dynamic-linking

我刚刚尝试使用静态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

~/lib/boost-1.56/lib

中的libboost库
-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

为什么尺寸会有这么大的差异?

1 个答案:

答案 0 :(得分:4)

静态库意味着,而不是链接到外部库文件的可执行文件(在Windows上它们是DLL),它们现在被集中到您的实际可执行文件中。如果有理由不想单独分发DLL,这是一件好事,但它也完全浪费了DLL的好处,例如能够单独交换它们而不是重新分发你的所有应用程序,以及让多个应用程序使用存储在系统中一个位置的公共代码。

考虑到Boost有多大,你的可执行文件有多大,这并不奇怪。