gcc编译器编译过程:
预处理器 编译器 汇编器 链接器
源程序----------->被修改的源程序----------->汇编程序---------->可重定位目标文件------->可执行目标程序
hello.c(文本) hello.i(文本) hello.s(文本) hello.o(二进制) hello(二进制)
预处理器:读取头文件,把头文件内容插入到程序文本中
编译器:将源程序翻译成汇编语言程序
汇编器:将汇编语言程序翻译成机器语言指令,合并打包成可重定位目标程序
链接器:合并处理.o文件,得到可执行目标文件 (与库文件*.o 和其它.o文件进行链接)
gcc : -o选项 用于指定输出可执行文件名 (若不用-o指定文件名,则默认生成可执行程序的文件名为a.out)
gcc -o hello hello.c
-c选项 表示只编译源文件,但不链接,生成可重定位目标文件(.o文件)
gcc -c hello.c 将只生成hello.o文件
-L选项 指定编译器寻找函数库的位置(非标准位置)
-l 选项 指定函数库文件
gcc -o hello hello.c -L . -l foo 编译器在当前目录下寻找函数库,并且指定使用libfoo.a的函数库
-I 选项 用来标志保存头文件的非标准位置
gcc -I /usr/dir1/include hello.c 编译器不仅在标准位置,也在/usr/dir1/include目录中查找hello.c中包含的头文件。