一、生成方式
- 静态库生成
g++ -c add.cc -o add.o g++ -c del.cc -o del.o ar rcs libapi.a del.o add.o g++ -static main.cc -o static main -L./ -lapi -l./ ./static main
- 动态库生成
g++ -c add.cc -o add.o g++ -c del.cc -o del.o g++ -shared -fPIC -o libapi.so del.o add.o g++ main.cc -o dynamic main -L./ -lapi -l./ export LD LIBRARY PATH=$LD LIBRARY PATH:/home/mark/interview/ccplus/lib ./dynamic main
二、链接方式
- 静态链接
把静态库编译进目标文件 - 动态链接
没有把库编译进目标文件
程序运行时才去加载运行代码:地址无关代码技术 -fPIC;装载时重定位
只做语法检查
三、空间占用
静态库会存在多个副本(内存和磁盘)
动态库只有一个副本
四、使用方式
静态库所在程序是直接运行
动态库所在程序是动态加载,注: 程序环境需要指定动态库查找路径 LD LIBRARY PATH
五、执行速度
静态库快、动态库慢
六、库文件发生变更
接口改变:都需要重新编译
接口实现改变:静态库都需要重新编译;动态库只需重新编译动态库
推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs