gpt4 book ai didi

c++ - 为什么用静态库编译后可执行文件增长这么多?

转载 作者:行者123 更新时间:2023-11-27 23:03:21 24 4
gpt4 key购买 nike

我刚刚尝试用静态 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 的好处,例如能够单独交换它们而不是重新分发所有应用程序,以及让多个应用程序使用仅存储在系统一个位置的公共(public)代码。

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

关于c++ - 为什么用静态库编译后可执行文件增长这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com