好奇的静态链接行为

时间:2012-01-19 22:24:31

标签: c++

我一直在玩一个名为QuantLib的财务库(http://quantlib.org/index.shtml),我试图将其静态链接到我的一个Visual C ++程序中。

现在,在初步看到提供的静态Quantlib库的大小(> 400 megs)时,我有点惊慌,因为我期望一个巨大的可执行文件,但不知何故exe仍然很小,几乎就像构建是仅动态加载库的相关部分。

您能否告知是否有任何Windows编程技术可能允许此类"稀疏"将行为与巨大的静态库相关联?

4 个答案:

答案 0 :(得分:3)

好吧,如果你的项目包含的代码没有从任何地方引用(并且不会被导出),那么在构建可执行文件时它会被删除。

与静态库完全相同 - 如果您不使用库中包含的函数,则不会包含它。

答案 1 :(得分:2)

链接器只包含主机可执行文件所需的功能。不包括不需要的功能。链接静态库时,这是链接器非常标准的行为。

答案 2 :(得分:1)

这就是静态库在大多数平台上的工作方式。静态库是由目标文件组成的基本归档文件。在链接时,当您告诉链接器使用静态库时,链接器将选择那些帮助它解析程序中未定义符号的对象文件以及已从静态库中选择的任何目标文件。

答案 3 :(得分:0)

通常只会引入库的相关部分,而不是整个库。

通常这是针对单个对象文件的粒度完成的,即静态库通常只是来自库构建的对象文件的集合,如果您的代码依赖于对象文件中的某些内容,那么整个对象文件被拉入。一些链接器也可以分离出各个函数。

该库还可能包含在您的可执行文件中被删除的调试信息。