标签:文件 gcc 其它 程序 编译器 翻译成 格式 main
程序被翻译成其它不同的格式
以main.c为例,程序文本如下
# include "stdio.h"
int main()
{
printf("Hello World!\n");
return 0;
}
在linux系统上,从源文件到目标文件的转化是由编译器驱动程序完成的:
gcc -o main.c main
gcc编译器驱动程序读取源程序文件main.c
,并且将它翻译成一个可执行目标文件main
。这个过程分为4个阶段,执行这四个阶段的程序(预处理器、编译器、汇编器和链接器)构成了编译系统。
- 预处理阶段:预处理器(cpp)根据以字符
#
开头的命令修改原始的C程序,即读取头文件的内容,将它直接插入到程序文本中,得到另一个C程序main.i
gcc -E main.c -o main.i
- 编译阶段:编译器(ccl)将文本文件
main.i
翻译称文本文件main.s
,它包含一个汇编语言程序
gcc -S main.i -o main.s
- 汇编阶段:汇编器(as)将
main.s
翻译成机器语言指令,打包成可重定位目标程序的格式,保存在main.o
中。
gcc -c main.s -o main.o
不用试图
cat -n main.o
,否则你将会看到一对乱码,因为这个文件是机器语言指令而不是字符
- 链接阶段:程序中调用了
printr()
函数,它存在与printf.o
的预编译目标文件中,链接器(ld)将其并入到main.o
中,得到可执行目标文件main
gcc main.o -o main
标签:文件,gcc,其它,程序,编译器,翻译成,格式,main 来源: https://www.cnblogs.com/Euler-0525/p/16453481.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。