程序由源代码变成可执行文件,一般可以分解为四个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
预处理过程主要处理源代码中以“#”开始的预编译指令;编译过程把预处理完成的文件进行词法、语法、语义等分析并产生相应的汇编代码文件;汇编过程将汇编代码文件翻译成机器可以执行的目标文件;链接过程将汇编生成的目标文件集合相连接并生成最终的可执行文件。
(1)预处理(cpp)gcc -E(输出问价通常以 .i 结尾),将头文件展开,宏替换等操作;
(2)编译器(gcc)gcc -S(输出问价以 .s 结尾)生成汇编代码;
(3)汇编器(as)gcc -c(输出文件以 .o 结尾)将汇编编译成二进制文件;
(4)连接器(ld)gcc,链接 lib 库生成可执行文件。
[root@centos1 src]# gcc -E hello.c >> hello.i
[root@centos1 src]# gcc -S hello.i
[root@centos1 src]# gcc -c hello.s
[root@centos1 src]# gcc -o hello.out hello.o
[root@centos1 src]# ./hello.out
hello world
GCC编译参数
-I 包含头文件路径(可以使绝对路径,也可以是相对路径)
-O 优化选项,1-3越高优先级越高
-L 包含的库路径
-l(L的小写)指定库名(通常libxxx.so或者libxxx.a,-lxxx)
-o 目标文件
-c 编译成.o文件
-g 用于gdb调试不加此选项不能gdb调试
-Wall 显示更多的警告
-D 指定宏编译
-lstdc++ 编译c++代码
原文:https://www.cnblogs.com/muen2020/p/14597965.html