1.源程序编译过程:
预处理:头文件展开,宏替换,删除注释
编译:c文件编译成汇编文件
汇编:将汇编程序编译成机器码
链接:将函数库中相应代码组合到目标文件中
2.gcc参数
预处理:gcc -E *.c -o *.i
编译:gcc -S *.i -o *.s
汇编:gcc -c *.s -o *.o
链接:gcc *.o -o *.elf
头文件目录指定-------- -I+path
编译过程中指定宏------ -D + name
程序优化----------- -O -O2 -O3
输出警告---------- -Wall
带调试信息------- -g(用于gdb调试)
指定静态库路径------- -L+静态库路径
指定使用库的名称----- -l + name
生成与位置无关的代码---- -fPIC(用于动态库生成)
生成动态库-------- -shared
nm 查看动态库静态库中的符号和类型
ldd 查看程序依赖
3.静态库
(1)编译源文件生成*.o文件
(2)使用ar将*.o文件进行打包
ar rcs lib*.a *.o`
(3)静态库优缺点:无需提供库,加载库速度较快,目标文件较大,库改变需重新编译目标文件。
4.动态库
(1) gcc -fPIC -c *.c -o .o
(2) gcc -shared lib.so *.o
(3) 将动态库所在路径加入LD_LIBRARY_PATH中或者将路径加入连接器配置文件中(/etc/ld.so.config)然后执行sudo ldconfig -v进行更新。