1. 编译流程
使用 gcc 编译器,将源代码 .c 文件一步一步编译至可执行程序。gcc 编译器在 Windows,Linux,Mac 均可正常编译。
编译具体过程如下:
1)打开 msys 目录下的 mingw64.exe,跳转至待编译源码的目录。
2)利用预处理器,将 .c 源代码文件转为 .i 宏替换后的源代码文件。gcc 编译器中输入以下代码实现宏替换。注意,01.hellowold.c 为 .c 文件名。
gcc -E 01.hellowold.c -o 01.hellowold.i
3)使用如下代码,将宏替换后的 .i 源代码文件使用编译器编译为汇编指令的 .s 文件。
gcc -S 01.hellowold.i -o 01.hellowold.s
4)将汇编指令 .s 文件编译为 .o 目标文件。
gcc -c 01.hellowold.s -o 01.hellowold.o
此时,目标文件已经不具备可读性(打开乱码),但可以通过 file 指令查看 .o 文件格式,为 COFF(common object file format)。而在 Linux 或 Mac 系统中,gcc 编译器编译出的 .o 文件,其格式通常为 ELF(executable linkable format)。
5).o 文件仍然不是可执行程序,此时还缺少链接器将源代码中使用的变量,库函数等与其实际的物理地址相连。使用 gcc 编译器,将 .o 文件通过链接器转为可执行程序,代码为:
gcc 01.hellowold.o -o 01.hellowold
6)通过 file 指令查看该文件格式,可以发现 01.hellowold 为 PE32+ 的文件,这代表 Windows 系统下该文件为可执行程序。使用 ./ + 文件名运行该可执行程序,程序正常执行,输出 Hello, World!
此外,在 5-1 小节也简单介绍过 C 语言编译过程和头文件展开(宏替换):https://blog.csdn.net/gltzlike/article/details/114327970