.lib 和 .obj 文件如何相互关联?他们的目的是什么?.lib 只是 .obj 文件的集合吗?如果是这样,那么 .obj 是否存储在 .lib 中,从而使 .obj 变得不必要?
3 回答
通常,这些.obj
文件是指目标文件。这是其编译形式的源文件。例如, a main.cpp
andfoo.cpp
会产生main.obj
and foo.obj
。
然后链接器的工作是将它们链接在一起,以便main.obj
可以访问定义的函数,foo.obj
反之亦然。链接器将输出您的二进制文件,即.lib
(或.a
、或.exe
、或 .dll`` 等)。
因此,从广义上讲,是的,二进制输出(.lib
在您的情况下)是链接.obj
文件的集合。一旦你完成编译,并想使用这个库,你只需要其他程序与.lib
. 这些.obj
被认为是中间文件,链接完成后就不需要了。
这取决于。如果 .lib 文件是静态库,那么它或多或少只是 .obj 文件的集合。如果您正在制作或使用 DLL,则 .lib 文件只是一个导入库,其中包含有关在相关 DLL 中可用的符号的信息。
是的,.lib 文件只是 .obj 文件的集合。没有对 .obj 文件的内容进行任何处理,最好的类比是 .zip 存档。是的,您可以在创建 .lib 后删除 .obj 文件,因为 .lib 包含 .obj 文件的逐字副本。
请注意,如果您使用 .lib 来分发您的产品,那么您通常必须创建其中的 4 个。Debug vs Release build 和 CRT 的两种风格(/MT vs /MD)。