警告我是C ++的新手。
当我编译程序时,我注意到我为每个类创建了一个.obj。当我查看程序文件中的其他程序时,我意识到这些程序几乎没有任何.obj,所以我猜我做错了。
此外,如果我从发布目录中删除obj文件并尝试再次运行exe并且它仍然像以前一样工作,我知道这些文件不会毫无意义但是......
他们的用途是什么?它应该为每个类文件制作它们吗? - 如果不是我如何解决这个问题?
如何在编译时将它们放在一个名为obj的文件夹的目录中?
答案 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文件生成目标文件)后,编译器将使用所有相关的目标文件来构建可执行文件。然后可以独立于目标文件运行可执行文件,并且可以删除目标文件。如果要创建另一个可执行文件,则需要再次使用相关代码的目标文件。
希望它有所帮助!