【发布时间】:2014-03-13 10:37:48
【问题描述】:
这里我有几个静态库的问题需要你的帮助。
我从一些书上了解到,静态库(Linux 中的 .a)包含一组已编译的对象,当它链接到可执行文件时,链接工具只会取出那些实际引用的对象。
所以如果 .a 包含 1.o、2.o 和 3.o,而我的应用程序只使用 1.o 中的函数,那么只有 1.o 会被构建到可执行文件中,这样是否正确?
然后让我们更进一步,假设我们有 2 个 .a 库,第一个包含 1.o、2.o 和 3.o,第二个包含 3.o 4.o 和 5.o。如果我的应用程序只使用 1.o 2.o 3.o 和 4.o 中的函数,那么只有这 4 .o 将被构建到可执行文件中,是否正确?
我提出这个问题是因为我正在构建一些用于 MSVC 的 .a 文件。这些 .a 库是在 MinGW 中构建的,然后应该与 MSVC 兼容。我可以将这些库包含到 MSVC 项目中并成功构建我的程序。但是即使我的程序是空的(只有一个空的 main 函数),生成的可执行文件也是 5 MB(所有 .a 的总大小应该约为 8MB)。
这是否意味着,在 MSVC 或 .lib(Win 的静态库)中使用时,.a 将作为一个整体构建到可执行文件中,但不会以它在 Linux 下的行为方式构建?
我还有一个关于以下内容的问题
如果我可以使用 -static 链接到 lib tiff 的静态版本,那么为什么它需要链接到其他库?静态库是否应该已经包含它需要的所有代码?
谢谢
【问题讨论】:
-
linux标签有什么关系?
-
在 Linux 上尽可能避免使用静态库。