我在Windows上使用MSVC创建了一个静态库*.lib.图书馆的大小是70KB.然后我有一个链接这个库的应用程序.但是现在最终可执行文件(*.exe)的大小是29KB,小于库.我想知道的是:
由于库是静态链接的,我认为它应该直接添加到可执行文件大小,最终的exe大小应该大于那个?Windows exe格式是否也对二进制数据进行了一些压缩?
它是如何用于linux系统的,那就是linux上的库(*.a/*.la文件)的大小与linux可执行文件(*.out)的大小有什么关系?
-广告
Windows和Unix上的静态库是.obj/.o文件的集合.链接器查看每个目标文件,并确定程序是否需要链接.如果不需要,则目标文件不会包含在最终的可执行文件中.这可能会导致可执行文件比库小.
编辑:正如MSalters所指出的,在Windows上,VC++编译器现在支持生成启用功能级链接的目标文件,例如,请参见此处.事实上,编辑和继续需要这样,因为编辑和继续需要能够替换可执行文件的最小可能部分.
文件中还有其他簿记信息,这些信息.lib
是最终可执行文件不需要的.此信息有助于链接器找到实际链接的代码.此外,调试信息可能存储在.lib
文件中但不存储在.exe
文件中(我不记得在lib文件中为obj存储调试信息的位置,它可能在其他地方).