1、gcc的主要作用:.c文件→可执行文件
2、gcc的编译过程:
(#)预处理(产生.i文件):文件包(文件内容代替include)、宏定义(简单的字符替换)、条件编译
→汇编文件(二进制、不可执行的.s文件) → 目标文件(机器语、.o文件) → 共享库、可执行文件
用gcc命令分解其编译过程:
(1)gcc -E hello.c > hello.i(>与-o一样都是重新定向的意思) (2)gcc -S hello.i
(3)gcc -c hello.s (4)gcc hello.o
把这四个步骤合并起来可用gcc hello.c -o hello或gcc -o hello hello.c(hello为定义的编译后可执行文件名)代替
3、gcc命令的一些修饰符:
-g:产生调试工具(gdb)所必要的符号信息
-O:优化编译,缩短运行时间(级别有-O0/1/2/3)
-D:利用命令在编译时进行宏定义 例:gcc -DPI=3.1415 -o hello hello.c
-U:取消宏定义
-I:+文件包位置(#include “myhead.h”) 例:gcc add.c sub.c -o main -I./tmp(多文件编译)
-Wall:生成所有警告信息
-Werror:把警告当成错误显示
-w:不生成警告信息
4、程序库:
(1)静态库:在编译使用时将需要的模块复制到程序中
静态库的创建:
a:gcc -c 源文件.c
b:ar rcs (可在这加路径,不加默认当前) 静态库名(lib```.a) 目标文件1 目标文件2
rc:静态库不存在,创建该库文件
s:更新静态库
使用:gcc -o file file.c -L. -lname(-L指定库路径,.表示当前目录,-l指定函数库名及libm.a中的a)
(2)动态库:在运行时,链接到动态库(加载动态库)。一个动态库可以被多个程序使用,故称为共享库。
动态库的创建:
gcc -shared -fPIC -o 库名.so(lib```.so) 源文件名.c
使用:gcc 源文件.c ./库名.so -o 可执行文件名