Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可执行文件在使用静态库编译后会增长这么多?_C++_Boost_Static Linking_Dynamic Linking - Fatal编程技术网

C++ 为什么可执行文件在使用静态库编译后会增长这么多?

C++ 为什么可执行文件在使用静态库编译后会增长这么多?,c++,boost,static-linking,dynamic-linking,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 大

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

为什么大小会有如此巨大的差异?

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


考虑到Boost有多大,您的可执行文件有多大也就不足为奇了。

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

考虑到Boost有多大,您的可执行文件有多大也就不足为奇了