在linux下经常会将一些.o文件打包成一个库,分为静态库和动态库。
静态库主要是任何一个程序需要这个库, 就会将这个静态库的内容拷贝一份到程序中,进行执行。
但是这样会出现一个问题, 当很多程序都要用这一个库的时候, 这个库就会被拷贝多份,然后造成代码冗余,占用内存空间, 这时就出现了动态库, 动态库只在系统中保存一份,哪一个程序使用它就去拿一份,不进行拷贝,这样大大节省了内存空间消耗。
举一个例子进行说明:
首先先编写四个.c 和四个.h文件,分别是add.c sub.c mul.c div.c 和 add.h sub.h mul.h div.h。进行测试:
1 #include "add.h"
2
3 int add(int a, int b)
4 {
5 return a+b;
6 }
3 #ifndef __ADD_H__
4 #define __ADD_H__
5
6 int add(int a,int b);
7
8
9 #endif //__ADD_H__
其他三个文件和add文件类似。
1,首先创建静态库:
通过命令:
ar -rc libmyku.a add.o sub.o mul.o div.o 创建静态库, 静态库库名为myku,静态库文件名为:libmhyku
通过错名:
ar -tv libmyku 可以查看静态库myku的内容
然后进行使用,如下图:
2,创建动态库以及使用
通过 gcc -fPIC -c sub.c add.c mul.c div.c 和 gcc -shared -o libmuky.so *.o
两句命令,创建了一个libmyku.so的动态库
使用动态库有两种方式:
(1)将动态库拷贝到/usr/lib目录下, 编译时直接 gcc main.c -lmyku即可
结果如图所示:
(2)将环境变量修改, export LD_LIBRARY_PATH = .
将当前目录添加到环境变量LD_LIBRARY_PATH中,再修改配置文件 /etc/ld.so.conf.d/XX.conf即可