我静态链接到一个10MB的lib并包含一个头文件,并且只使用了一些定义。我惊讶地发现我的可执行文件大小只有100k!
我猜链接器只链接exe中使用的函数/变量?有没有办法预测给定x大小的lib的可执行文件大小?
或者它是纯粹的lib实现的大小,例如每个使用的函数吗?
安格斯
答案 0 :(得分:2)
如果你愿意,可以链接一个exabyte库,但是,如果你只从中引入一个目标文件,并且不需要任何其他目标文件,那么你最终可能会得到一个非常小的可执行文件。
实际上,如果你链接它但没有它可以满足的未解析符号,它将对你的可执行文件大小没有任何影响。
这就是图书馆工作的方式。它们通常仅用于满足未解析的外部,并且通常仅引入将满足该引用的单个目标文件(请记住,这样做可能会生成更多未解析的外部需要满足)。
在没有实际进行链接的情况下进行估算非常困难,因为在您这样做之前,您无法轻易地知道将从库中提取什么内容。
答案 1 :(得分:0)
如果静态链接,编译器只复制lib所需的部分。因此,如果只使用一小部分函数,则可执行文件可以比lib小得多。