如何根据lib大小预测可执行文件的大小

时间:2011-03-17 11:26:24

标签: linker

我静态链接到一个10MB的lib并包含一个头文件,并且只使用了一些定义。我惊讶地发现我的可执行文件大小只有100k!

我猜链接器只链接exe中使用的函数/变量?有没有办法预测给定x大小的lib的可执行文件大小?

或者它是纯粹的lib实现的大小,例如每个使用的函数吗?

安格斯

2 个答案:

答案 0 :(得分:2)

如果你愿意,可以链接一个exabyte库,但是,如果你只从中引入一个目标文件,并且不需要任何其他目标文件,那么你最终可能会得到一个非常小的可执行文件。

实际上,如果你链接它但没有它可以满足的未解析符号,它将对你的可执行文件大小没有任何影响。

这就是图书馆工作的方式。它们通常仅用于满足未解析的外部,并且通常仅引入将满足该引用的单个目标文件(请记住,这样做可能会生成更多未解析的外部需要满足)。

在没有实际进行链接的情况下进行估算非常困难,因为在您这样做之前,您无法轻易地知道将从库中提取什么内容。

答案 1 :(得分:0)

如果静态链接,编译器只复制lib所需的部分。因此,如果只使用一小部分函数,​​则可执行文件可以比lib小得多。