1. C文件变为可执行文件的过程
1.1 预处理器处理
- 头文件展开,宏替换,注释去掉
gcc -E hello.c -o hello.i
1.2 编译器处理
- C文件变为汇编文件
gcc -S hello.i -o hello.s
1.3 汇编器处理
- 将汇编文件变为二进制文件
gcc -c hello.s -o hello.o
1.4 连接器
- 将库函数中的相应代码组合到目标文件中
gcc hello.o -o hello
2. gcc相关命令
2.1 编译时指定头文件目录
gcc sum.c -I ./include -o app
2.2 编译时添加一个宏定义
gcc sum.c -o app -D DEBUG
2.3 在编译时输出警告信息
gcc sum.c -Wall
2.4 编译时包含调试信息
gcc sum.c -g
2.5 编译时指定动态库或静态库的信息
gcc main.c -I ../include -L lib -l MyCalc -o myapp
# -I:头文件的位置
# -L:库的位置
# -l:库的名称
3. gcc之制作静态库
3.1 静态库的命名规则
- lib+库的名字+.a
- 如 libmytest.a
3.2 静态库的制作步骤
- 生成对应的.o文件。
- 将生成的.o文件打包成静态库
gcc *.c -c
ar rcs libMyCalc.a *.o
3.3 发布静态库
-
发布静态库 libMyCalc.a
-
发布静态库所对应的头文件
4. gcc之制作动态库
4.1 动态库的命名规则
- lib+名字+.so
- 如libmytest.so
4.2 制作步骤
- 生成与位置无关的.o代码
- 将.o文件打包成共享库
# -fPIC:生成与位置无关的代码
gcc -fPIC -c *.c
# 打包为共享库
gcc -shared -o libMyCalc.so *.o
4.3 如何让系统找到共享库
- 方式一:拷贝自己的共享库到/lib 或者/usr/lib文件下
- 方式二:设置环境变量
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库路径
# 查看某个可执行文件的动态链接库的信息
ldd myapp