c源程序编译后会生成.obj的文件,我知道那是链接器生成的目标代码,那为什么它打不开,它的代码存哪里去了,当我把它删了之后直接执行.exe程序还是可以的,那它存在的意义是什么?还有它的图标好奇怪,像是什么执行后的碎片。
c语言编译生成的.obj文件是一种文本文件,程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。
obj文件基本结构:OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。
OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。
扩展资料:
C编译的整个过程很复杂,大致可以分为以下阶段:
1、预处理阶段
在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。
2、编译、优化阶段
编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。
3、汇编阶段
将汇编语言翻译成机器指令。
参考资料来源:百度百科-c语言
obj文件是链接以前的编译结果。
1个源程序生成1个 obj文件,1个大程序可以有 若干个 源程序 组成,每个源程序各自产生自己的 obj文件。然后 通过链接,把 obj文件们 和 库 文件们 链接成 exe 文件 (或 DLL文件) .
库文件实际上也是 obj文件。
exe 文件 生成后 obj文件 可以 删掉,节省磁盘空间。