1.静态库的制作与使用
首先静态库的制作需要用到ar命令,ar命令不了解,可以看下下面文章,对ar命令有详细的介绍:
我们来看以下静态库制作的流程:
首先将.c文件生成为.o文件。
用ar命令生成静态库
在主函数包含函数头文件
运行的时候引用静态库即可
一个实例:
首先,创建一个头文件lib.h,内容如下:
int add(int a,int b);
int sub(int a,int b);
再分别创建两个文件add.c和sub.c,内容如下:
# include"lib.h"
int add(int a,int b)
{
return a+b;
}
# include"lib.h"
int sub(int a,int b)
{
return a-b;
}
使用gcc将.c文件编译程.o文件,如下图
然后用ar命令将.o文件打包成静态库.a文件
创建完成之后发现目录下多了一个.a静态库。
静态库的使用:
首先,创建一个main.c文件,包含相应函数的头文件,内容入下:
#include <stdio.h>
#include"lib.h"
int main()
{
int a = 5;
int b = 3;
printf("%d+%d=%d\n",a,b,add(a,b));
printf("%d-%d=%d\n",a,b,sub(a,b));
return 0;
}
我们再编译main.c的时候需要加入静态库:
库文件一般以lib开始命名,引用的时候可以省略ib和后缀.a.
-L.表示在当前目录下寻找库文件,如果不加-L. ,那么会去/usr/lib的目录下寻找此静态库
2.共享库的制作与使用
用实例来解释:
和上面一个,首先有文件,lib.h add.o sub.o main.c
共享库的制作:
-shared表示共享库的制作。
关于-fPIC的参数的含义可以参考下面博文:
libmylib.so就是一个共享库文件
使用:
生成可执行程序main的方法和静态库一样,生成main以后我们不能立即去执行,这是因为:因为在动态函数库使用时,会默认在 /usr/lib或 /lib目录下去查找动态库,而此时我们生成的库不在里面