C++ .lib和.obj之间的关系以及我在c+中的项目是什么+;?

C++ .lib和.obj之间的关系以及我在c+中的项目是什么+;?,c++,static-libraries,C++,Static Libraries,.lib和.obj文件如何相互关联?他们的目的是什么?.lib只是.obj文件的集合吗?如果是这样,那么.obj是否存储在.lib中,从而使.obj变得不必要 通常,.obj文件指的是对象文件。这是一个编译后的源文件。例如,一个main.cpp和foo.cpp将产生main.obj和foo.obj 然后链接器的任务是将它们链接在一起,以便main.obj可以访问foo.obj中定义的函数,反之亦然。链接器将输出您的二进制文件,即.lib(或.a,或.exe,或.dll``等) 因此,从松散的意义

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

通常,
.obj
文件指的是对象文件。这是一个编译后的源文件。例如,一个
main.cpp
foo.cpp
将产生
main.obj
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个。调试版本与发布版本以及两种风格的CRT(/MT vs/MD)