库的生成和使用
库是预先编译好的方法的集合,库文件常存放的地点为/lib或/usr/lib,库对应的头文件一般存放在/usr/include中.
静态库:是在程序编译时链接的。使用静态库的方法,在编译链接时,直接包含到可执行程序中,运行时,不在需要用到库。libxx.a(xx 为库名)
若有两种方法int add(int a,int b),int max(int a,int b)分别在两个文件add.c和max.c中存放,则静态库的生成过程如下:
1):将所有的.c文件编译成.o目标文件
gcc -c add.c 生成add.o
gcc -c max.c 生成max.o
2):对生成的.o目标文件打包生成静态库
ar crv libxx.a add.o max.o
libxx.a是库的名字
ar:做库的命令
c:创建库
r:将方法添加到库里
v:显示过程,可以不要
3)使用静态库
gcc -o main main.c -L. -lxx
-L:指定路径 .代表当前路径 -l:指定库名
共享库又称动态库是在程序运行时链接的。使用共享库里的方法,在编译链接时,在可行性文件中不包含,只作标记,运行时,动态链接。
libxx.so xx为库名
1)创建共享库:
xx.c -> xx.o
gcc -shared -fPIC -o libxx.so xx.o xx’.o
2)将所有的.c文件编译成.o目标文件
gcc -c max.c
gcc -c add.c
对生成的.o文件处理生成共享库,假设共享库的名字为libcy.so, gcc -shared -fPIC -o libcy.so add.o max.o参数-shared 表示输出结果是共享库类型的-fPIC 表示使用地址无关代码(Position Independent Code)技术来生产输出文件
3)库的使用gcc -o main main.c -lfoocp libfoo.so /usr/lib
ldd + 文件名 查看可执行程序应用的共享库(eg. ldd main)