为什么C++ OBJ文件很重要?

Dan*_*ier 16 c++

请注意,我是C++的新手.

当我编译我的程序时,我注意到我为每个类创建了一个.obj.当我查看程序文件中的其他程序时,我意识到这些程序几乎没有任何.obj,所以我猜我做错了.

此外,如果我从发布目录中删除obj文件并尝试再次运行exe并且它仍然像以前一样工作,我知道这些文件不能毫无意义但是......

它们的用途是什么?它应该为每个类文件制作它们吗? - 如果不是我如何解决这个问题?

当我编译时,如何将它们放在一个名为obj的文件夹中的目录中?

hyd*_*yde 31

.obj文件(.oLinux/Unix上的文件)是编译后的源文件,确实每个.cpp文件都有一个,或者更正式的"编译单元".它们是在构建项目的编译阶段产生的.

.obj然后,这些文件通过链接器组合到应用程序(通常.exe是Windows上的文件)或库文件(在Windows上可以是.dll动态库)或.lib静态库(基本上是.obj一个打包到一个文件中的文件集合), 见下文).在类Unix平台上,应用程序通常没有扩展,动态库有.so扩展,静态库有.a扩展.

您没有看到带有程序的.obj文件或静态.lib文件,因为它们在运行时不需要,它们仅由链接器使用.当您运行建设项目的链接阶段,链接器包含了所有需要的.obj文件到.exe.dll文件(或同等学历),这是在运行时使用.


dar*_*aze 5

编译后生成Obj文件.编译器使用许多信息生成它们.然后链接器生成包含其他文件的可执行文件,因此不再需要那些OBJ文件.

在任何C++书籍中都可以找到一个非常扩展的答案.

没有问题.但是如果你删除它们,你将强制你的编译器编译一些没有变化但没有OBJ文件的文件.要注意这一点.

如果您仍在使用代码,请忘掉它们.

  • 我刚刚写了半页的C++"书"并没有写出一个扩展的答案.因此你错了,我被迫向你投票. (3认同)
  • SO的目的不是将人们重定向到资源,而是作为人们的资源. (3认同)

Cor*_*ter 5

通过编译代码生成目标文件.他们将您的代码转换为机器代码,以便计算机可以理解并实施您的解决方案.生成目标文件(为每个.cpp文件生成目标文件)后,编译器将使用所有相关的目标文件来构建可执行文件.然后可以独立于目标文件运行可执行文件,并且可以删除目标文件.如果要创建另一个可执行文件,则需要再次使用相关代码的目标文件.

希望能帮助到你!