C语言编译过程
C代码编译成可执行文件,可以分为4个阶段,如下图所示(图片来自CSAPP),执行这四个阶段的程序(预处理器、编译器、汇编器、链接器)一起构成了编译系统:
- 预处理:宏定义展开、头文件展开、条件编译、同时将代码中注释删除,这里不检查语法
gcc -E hello.c -o hello.i - 编译:检查语法,将预处理后文件编译成汇编文件
gcc -S hello.i -o hello.s - 汇编:将汇编文件生成目标文件(二进制文件)
gcc -c hello.s -o hello.o - 链接:C语言写的代码需要依赖各种库,所以编译后需要将库链接到最终可执行程序中去
gcc hello.o -o hello
gcc简易用法
示例:sin.c文件内容如下
#include<stdio.h>
int main()
{
float value;
value = sin(3.14/2);
printf("%f\n",value);
return 0;
}
编译
gcc sin.c -lm -L/usr/lib -I/usr/include
-lm:加入libm.so或libm.a这个函数库
-L: 函数库搜索目录(默认为/usr/lib和/lib)
-I: include文件所在目录