概述
本文为使用GCC编译C源代码总结
本文代码如下:
//main.c
#include <stdio.h>
#define Pi 3.14
int main(int argc, const char * argv[]) {
printf("hello world\n");
float i = 0.0;
i = i + Pi;
printf("i = %f\n", i);
return 0;
}
预处理
执行如下命令,可在文件main.i中生成预处理后的代码
gcc -E main.c -o main.i
上述命令的作用是让GCC编译器预处理main.c文件并将预处理后的结果保存到main.i文件中,其中
-
-E
表示预处理后停止编译 -
-o file
表示将预处理后的结果保存到file文件中,在本文中是保存到main.i文件中
注意:GCC命令中的选项区分大小写,如果上述命令中-E
改为-e
则会报错:error:no input files
图1为经过预处理后的代码,可以看到代码中宏定义Pi已经被替换了。
编译
执行如下命令,可在文件main.s中生成经过预处理、编译后的代码
gcc -S main.c -o main.s
上述命令的作用是让GCC编译器预处理、编译main.c文件并将编译生成的汇编代码存储到main.s文件中,其中
-
-S
表示预处理、编译后即停止。
汇编
执行如下命令,可在文件main.o中生成经过预处理、编译、汇编后的代码(为二进制格式)
-
gcc -c main .c -o main.o
让GCC编译器预处理、编译、汇编main.c文件,并将汇编生成的目标文件代码保存到main.o中 -
as main.s -o main.o
用汇编器从汇编代码生成目标代码
其中
-
-c
表示预处理、编译、汇编后停止。
链接
执行如下命令
gcc main.c -o main
从C源程序直接生成执行代码