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

Linker 如何根据库大小预测可执行文件的大小,linker,Linker,我静态链接到一个10MB的库,包括一个头文件和一些定义。我惊讶地发现我的可执行文件大小只有100k 我猜链接器只链接exe中使用的函数/变量?如果lib的大小为x,是否有任何方法可以预测可执行文件的大小 或者它仅仅是库实现的大小,比如所使用的每个函数的大小 Angus如果您愿意,您可以链接到一个1Exabyte库,但是,如果您只从库中引入一个对象文件,而不需要任何其他文件,那么最终可能会得到一个非常小的可执行文件 事实上,如果您与它链接,但没有它可以满足的未解析符号,那么它将对您的可执行文件大小

我静态链接到一个10MB的库,包括一个头文件和一些定义。我惊讶地发现我的可执行文件大小只有100k

我猜链接器只链接exe中使用的函数/变量?如果lib的大小为x,是否有任何方法可以预测可执行文件的大小

或者它仅仅是库实现的大小,比如所使用的每个函数的大小


Angus

如果您愿意,您可以链接到一个1Exabyte库,但是,如果您只从库中引入一个对象文件,而不需要任何其他文件,那么最终可能会得到一个非常小的可执行文件

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

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


如果不进行实际的链接,就很难进行估计,因为在进行链接之前,您很难判断将从库中提取什么。

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