obj文件编译
c语言编译生成的.obj文件是一种文本文件,程序编译时生成的中间代码文件目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。
obj文件基本结构:OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。
OBJ文件由一行行文本组成,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。
(1)obj文件编译扩展阅读:
C编译的整个过程很复杂,大致可以分为以下阶段:
1、预处理阶段
在该阶段主要完成对源代码的预处理工作,主要包括对宏定义指令,头文件包含指令,预定义指令和特殊字符的处理,如对宏定义的替换以及文件头中所包含的文件中预定义代码的替换等,总之这步主要完成一些替换工作,输出是同源文件含义相同但内容不同的文件。
2、编译、优化阶段
编译就是将第一阶段处理得到的文件通过词法语法分析等转换为汇编语言。优化包括对中间代码的优化,如删除公共表达式,循环优化等;和对目标代码的生成进行的优化,如如何充分利用机器的寄存器存放有关变量的值,以减少内存访问次数。
3、汇编阶段
将汇编语言翻译成机器指令。
B. Makefile 怎么把obj文件编译到某个目录
目录结构
Project
- bin
- src [Makefile在这里]
- obj
想要把编译的目标文件放到obj目录派指,
因为cl不能指定目标文件输出路径,
所以目前采取了一种很蛋疼的方式:
代码:
bin = "../bin/program.exe"
obj = "../obj"
link_cmd = "TODO:先留着吧"
linkcmd_vc = "TODO:也留着吧"
objects = $(obj)/main.obj
$(bin) : $(objects)
$(CC) -o $(bin) $(objects)
$(obj)/main.obj : main.c
cd ../obj
$(CC) -c ../src/main.c
就是对于每个文件每次手动改变一下工作目录。
于是为了解决这个问题,扩展的想法是这样:
1. 找到一个Makefile每次尘毁配make都首先执行的部余山分(就像c中的main.c)
2. 在上述部分中,改变当前工作路径。
C. C语言源程序文件名的后缀是.OBJ,经过编译后,生成文件的后缀是什么经过连接后,生成文件的后缀是什么
C语言源程序文件名的后缀是.c。C源程序经过C编译程序编译之后生成一个后缀为.OBJ的二进制文件,
然后由称为“连接程序”的软件,把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。
由高级语言编写的程序称为“源程序”,把由二进制代码表示的程序称为“目标程序”。为了把源程序转换成机器能接受的目标程序,这时我们需要具有翻译功能的软件--“编译程序”。每种高级语言都有与它对应的编译程序。
(3)obj文件编译扩展阅读
1、目标文件的扩展名为“.obj”(Windows)或“.o”(Linux)。目标文件已经是机器指令,但还不能运行,因为目标文件还没有解决函数调用问题。
2、可执行文件的扩展名为“.exe“。
D. c 语言编译后产生的obj文件是做什么的
obj文件是编辑好的文本文件进行成功编译后生成的目标程序