简介
函数库分为静态函数库和动态函数库,Linux下的应用程序使用的主要函数库均存放于/lib 和 /usr/lib 目录下。其中动态函数库命名方式为*.so.*
,静态函数库的命名方式为 *.a
.
静态链接库
优点:使用静态链接库的代码在链接时全部被copy到程序中。这样程序不用依靠系统的库(用 -static 参数编译的程序与不加,用ls -l 文件 来查看文件大小)
缺点:当有多个进程在内存中同时运行,并且使用相同的库函数,那么就会有多份拷贝,这就是对空间的浪费
制作静态链接库(制作库 age.a)
新建age.c
新建age.h —声明一下 函数void myage(int age)
只编译不连接age.c得到age.o (gcc -c age.c -o age.o)
ar cqs libage.a age.o ,生成库文件 ,注意库文件前缀一定是lib
将制作好的 libage.a 复制到/usr/lib
新建一个myage.c
链接刚创建的函数库,gcc -myage.c -lage -o myage. 注意“-l库”-> “-lage” ,要去掉libage.a的前缀 lib 和 .a。因为GCC默认只会链接C函数库
动态函数库的设计
还是以上面的文件为例
修改第四步为:****gcc -shared -fPIC age.o libage.so
-fPIC:使输出的对象模块是按照可重定位地址方式生成的
shared:指明产生动态链接库