gcc xxx.cpp究竟经历了什么?
大家好,我是东北码农。
今天我们深入探索一下,一次gcc命令背后都进行了哪些工作。
gcc编译时,这一行简单的指令其实经历了很多复杂的过程:
下面我们拆解编译过程,一一讲解。
-E是预处理,-o指定输出文件。生成的xxx.i不放了,建议大家自己试试.
这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理文件(xxx.i)之后的程序转换成特定汇编(xxx.s)代码的过程。
-S是编译,生成汇编代码的过程,生成的xxx.s不放了,建议大家自己试试。
汇编过程将上一步的汇编代码转换成机器码,这一步产生的文件叫做目标文件,是二进制格式。
使用汇编器将汇编代码转成机器可以执行的指令,其实就是将汇编指令和机器指令按照对照表一一翻译
链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。附加的目标文件包括静态连接库和动态连接库。
生成可执行程序过程为成四个步骤:
1、由.c文件到.i文件,这个过程叫预处理。
2、由.i文件到.s文件,这个过程叫编译。
3、由.s文件到.o文件,这个过程叫汇编。
4、由.o文件到可执行文件,这个过程叫链接。
东北码农,全网同名,欢迎大家使用常用聊天软件关注、评论交流~
如果大家觉得有用,求点赞、转发~
/
/
xxx.cpp
int
a1
=
4
;
int
a2
=
5
;
int
main()
{
int
x
=
Max
(a1,a2);
printf(
"Max(5,6)=%d\n"
,x);
return
0
;
}
/
/
xxx.cpp
int
a1
=
4
;
int
a2
=
5
;
int
main()
{
int
x
=
Max
(a1,a2);
printf(
"Max(5,6)=%d\n"
,x);
return
0
;
}
xjp@xxx:~
/
code
/
case
/
case31_gcc_compile_test$ g
+
+
xxx.cpp
xjp@xxx:~
/
code
/
case
/
case31_gcc_compile_test$ g
+
+
xxx.cpp
xjp@xxx:~
/
code
/
case
/
case31_gcc_compile_test$ .
/
a.out
Max
(
5
,
6
)
=
5
xjp@xxx:~
/
code
/
case
/
case31_gcc_compile_test$ .
/
a.out
Max
(
5
,
6
)
=
5
g
+
+
-
E xxx.cpp
-
o xxx.i
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-4-9 07:40
被assqqq编辑
,原因: 格式错了