8

.lib 和 .obj 文件如何相互关联?他们的目的是什么?.lib 只是 .obj 文件的集合吗?如果是这样,那么 .obj 是否存储在 .lib 中,从而使 .obj 变得不必要?

4

3 回答 3

12

通常,这些.obj文件是指目标文件。这是其编译形式的源文件。例如, a main.cppandfoo.cpp会产生main.objand foo.obj

然后链接器的工作是将它们链接在一起,以便main.obj可以访问定义的函数,foo.obj反之亦然。链接器将输出您的二进制文件,即.lib(或.a、或.exe、或 .dll`` 等)。

因此,从广义上讲,是的,二进制输出(.lib在您的情况下)是链接.obj文件的集合。一旦你完成编译,并想使用这个库,你只需要其他程序与.lib. 这些.obj被认为是中间文件,链接完成后就不需要了。

于 2010-01-23T03:51:00.343 回答
2

这取决于。如果 .lib 文件是静态库,那么它或多或少只是 .obj 文件的集合。如果您正在制作或使用 DLL,则 .lib 文件只是一个导入库,其中包含有关在相关 DLL 中可用的符号的信息。

于 2010-01-23T03:57:37.807 回答
1

是的,.lib 文件只是 .obj 文件的集合。没有对 .obj 文件的内容进行任何处理,最好的类比是 .zip 存档。是的,您可以在创建 .lib 后删除 .obj 文件,因为 .lib 包含 .obj 文件的逐字副本。

请注意,如果您使用 .lib 来分发您的产品,那么您通常必须创建其中的 4 个。Debug vs Release build 和 CRT 的两种风格(/MT vs /MD)。

于 2010-01-23T11:43:35.817 回答