gol*_*ean 10 static-libraries static-linking
我在Windows上使用MSVC创建了一个静态库*.lib.图书馆的大小是70KB.然后我有一个链接这个库的应用程序.但是现在最终可执行文件(*.exe)的大小是29KB,小于库.我想知道的是:
由于库是静态链接的,我认为它应该直接添加到可执行文件大小,最终的exe大小应该大于那个?Windows exe格式是否也对二进制数据进行了一些压缩?
它是如何用于linux系统的,那就是linux上的库(*.a/*.la文件)的大小与linux可执行文件(*.out)的大小有什么关系?
-广告
静态库可能包含几个从未使用过的函数。当链接器将库与主可执行文件链接时,它发现某些函数从未被使用(并且它们的地址从未被获取并存储在函数指针中),它只是丢弃代码。它还可以递归执行此操作:如果从未调用函数 A(),并且 A() 调用 B(),但从未以其他方式调用 B(),则它可以删除 A() 和 B() 的代码。在 Linux 上,同样的事情也会发生。
文件中还有其他簿记信息,这些信息.lib
是最终可执行文件不需要的.此信息有助于链接器找到实际链接的代码.此外,调试信息可能存储在.lib
文件中但不存储在.exe
文件中(我不记得在lib文件中为obj存储调试信息的位置,它可能在其他地方).
归档时间: |
|
查看次数: |
6340 次 |
最近记录: |