gcc编译及链接阶段
- Pre-Processing:
gcc -E test1.c -o test1.i
完成源代码的预处理(可以生成可以读懂的C语言代码)
- Compling:
gcc -S test1.i -o test1.s
完成预处理后的代码 到 汇编语言的转换(生成汇编语言,与机器有关)
- Assembling:
gcc -c test1.s -o test1.o
完成汇编代码到机器代码的转换(本地目标代码)
- Linking:
gcc test1.o -o test1.out
完成目标代码的系统及用户调用的地址连接
GCC对头文件的使用
头文件的查找方式
1. GCC会在编译时,查找/usr/[local]include(头文件),/usr/[local]lib(库)
2. 在代码中使用:#include “头文件的相对路径”,直接查找到头文件
3. 使用gcc -I[目录] 指定“附加的”头文件所在路径,此时在源代码中使用 #include <头文件名>
库文件的链接方法:
- 默认:gcc 源文件 (直接从/usr/lib中查找)
- 指定:gcc 源文件 [库文件的路径] (附加自己的库),如:gcc main.c ./lib/libmath.a(注意.a是归档文件,可以是编译后的文件改名字得到,也可以用ar命令建立)
- 参数化指定:gcc 源文件 -L [库目录的路径] -l[库名] (库名的规则:lib[库名].a),如:gcc main.c -L ./lib -lmath,代表./lib/libmath.a文件
ar建立归档文件的方法(静态库):
- ar crv 归档文件 目标文件列表
- ar crv libmath.a sum.o multi.o
mac下“共享库”的建立过程
- gcc a.o b.o -dynamiclib -o libx.dylib (打包成为“共享库”)
- sudo cp libx.dylib /usr/local/lib/(copy到共享库的位置中)
- gcc main.c -L./lib/ -lx (编译并链接共享库)
Linux下“共享库建立方法”
- gcc a.o b.o -shared -o libx.so (打包成为“共享库”)
- export export LD_LIBRARY_PATH=/home/john/lib/:$LD_LIBRARY_PATH (指定位置)
- gcc main.c -L./lib/ -lx(编译并链接共享库)