在编译过程中,.i
和 .s
文件是中间步骤生成的文件,但通常在简单的编译过程中不会显式生成和保存这些文件。以下是这些文件的作用:
预处理器将源代码中的宏展开、头文件包含和条件编译处理后生成预处理文件。你可以使用 -E
选项让编译器只进行预处理并输出到 .i
文件。
g++ -E main.cpp -o main.i
编译器将预处理后的代码转换为汇编代码,生成汇编文件。你可以使用 -S
选项让编译器只进行编译并输出到 .s
文件。
g++ -S main.i -o main.s
汇编器将汇编代码转换为机器代码,生成目标文件。你可以使用 -c
选项让编译器只进行汇编并输出到 .o
文件。
g++ -c main.s -o main.o
链接器将目标文件和库文件链接在一起,生成可执行文件。
g++ main.o -o my_program
以下是从源代码到可执行文件的完整过程,包括所有中间步骤:
# 预处理
g++ -E main.cpp -o main.i
# 编译
g++ -S main.i -o main.s
# 汇编
g++ -c main.s -o main.o
# 链接
g++ main.o -o my_program