Linux&C语言基础gcc编译、静态库与动态库(共享库)的制作

本文用到的循环链表代码来源于《C语言 算法与数据结构 五种双向链表的实现方法》的第三种

静态库

库文件名:libxx.a
xx 指库名

先编译成object文件  gcc -c llist.c

将object文件编译成静态库   ar -cr libxx.a yyy.o

头文件发布到/usr/local/include
库文件发布到/usr/local/lib

gcc -L/usr/local/lib -o main main.o -lxx
gcc -L/usr/local/lib -o main main.c -lxx
-l 参数必须在最后,有依赖

bf5cf47d63c2e3dbcd1cba0c6ed45cbe-1

 

动态库

libxx.so

gcc -shared -fPIC -o libxx.so yyy.c       # -fPIC 表示必须与位置无关

头文件发布到/usr/local/include
库文件发布到/usr/local/lib

在 /etc/ld.so.conf 中添加路径 /usr/local/lib
终端运行sudo /sbin/ldconfig #让系统重读 /etc/ld.so.conf

gcc -I/usr/local/include -L/usr/local/lib -o … -lxx

ldd – print shared library dependencies

ldd ./main
#打印出来动态库的依赖关系

9f9c2a59bec123dc47248cb78b812727-1

非 root 用户发布
cp xx.so ~/lib
export LD_LIBRARY_PATH=~/lib

 

 

2021/3/8更新  动态库和静态库的区别

静态库在程序编译时会被连接到目标代码中,程序运行时不再需要静态库;

而动态库在程序编译时,不会放到连接的目标代码中,而是在程序运行时被载入,因此在程序运行时还需要动态库的存在。

 

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容