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

时间:2014-01-15 14:27:20

标签: c++

警告我是C ++的新手。

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

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

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

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

3 个答案:

答案 0 :(得分:30)

.obj个文件(Linux / Unix上的.o个文件)是已编译的源文件,每个.cpp文件确实会有一个,或者更正式的“编译单元”。它们是在构建项目的编译阶段产生的。

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

您没有看到.obj个文件或带有程序的静态.lib文件,因为它们在运行时不需要,它们仅由链接器使用。当您运行构建项目的链接阶段时,链接器将所有需要的.obj文件合并到.exe.dll文件(或等效文件)中,这些文件在运行时使用。

答案 1 :(得分:5)

编译后会生成

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

任何C ++书中都可以找到一个非常广泛的答案。

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

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

答案 2 :(得分:5)

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

希望它有所帮助!