静态库和动态库构建
静态库载入的是编译时间,动态库载入的是运行时间
同时存在时,编译器自动会匹配动态库
1、静态库
静态库名称:libxxx.a(xxx代表库的名称)
1.1 静态库的生成
ar -cr libxx.a yyy.o //libxxx.a是库的名称,yyy.o 是目标文件
ar -cr libllist.a llist.o //llist是我们的库
代码执行之后会出现如下文件:
1.2 库的保存
mv llist.h /usr/local/include //include保存头文件的位置
mv libllist.a /usr/local/lib //lib保存库的位置
1.3 引用静态库进行编译文件
gcc -L/usr/local/lib -o main main.c -lxx //-L指链接我的库文件路径
gcc main.c -o main -lllist //-l 手动链接选项 -lllist 链接到llist库
- 注意:-l 参数必须在最后,有依赖
1.4 执行可执行文件
执行成功.
2、动态库
动态库名称:libxxx.so(xxx代表库的名称)
2.1 动态库的生成
gcc -shared -fpic -o libxx.so yyy.c //-o 获得一个目标
gcc -shared -fpic -o libllist.so llist.c //生成动态库llist.so
代码执行之后会出现如下文件:
2.2 库的保存
mv llist.h /usr/local/include //include保存头文件的位置
mv libllist.so /usr/local/lib //lib保存库的位置
2.3 添加库文件路径
sudo vim /etc/ld.so.conf
添加"/usr/local/lib"
重读:重新读取动态库所在的目录
/sbin/ldconfig -----> 重读 /etc/ld.so.conf
2.3 引用动态库进行编译文件
gcc -I/usr/local/include -L/usr/local/lib main.c -o main -lxx
gcc main.c -o main.o -lllist //编译并且链接到llist库
2.4 编译文件时需要用到两个库的情况
gcc -shared -fpic -o libqueue.so queue.c //生成动态库llist.so
mv libqueue.so /usr/local/lib //lib保存库的位置
/sbin/ldconfig //重读
gcc main.c -o main.o -lllist -lqueue