C++ 动态库与静态库的区别?

一、生成方式

  1. 静态库生成
cpp 复制代码
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
  1. 动态库生成
cpp 复制代码
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

二、链接方式

  1. 静态链接

    把静态库编译进目标文件

  2. 动态链接

    没有把库编译进目标文件

    程序运行时才去加载运行代码:地址无关代码技术 -fPIC;装载时重定位

    只做语法检查

三、空间占用

静态库会存在多个副本(内存和磁盘)

动态库只有一个副本

四、使用方式

静态库所在程序是直接运行

动态库所在程序是动态加载,注: 程序环境需要指定动态库查找路径 LD LIBRARY PATH

五、执行速度

静态库快、动态库慢

六、库文件发生变更

接口改变:都需要重新编译

接口实现改变:静态库都需要重新编译;动态库只需重新编译动态库


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/VsFMs

相关推荐
washingtin5 分钟前
Get “https://registry-1.docker.io/v2/“: context deadline exceeded
java·开发语言
only-lucky11 分钟前
Python版本OpenCV
开发语言·python·opencv
三万棵雪松15 分钟前
【python-基础】
开发语言·python
一路往蓝-Anbo15 分钟前
C语言从句柄到对象 (七) —— 给对象加把锁:RTOS 环境下的并发安全
java·c语言·开发语言·stm32·单片机·嵌入式硬件·算法
先做个垃圾出来………16 分钟前
2610.转换二维数组
开发语言·python
天下皆白_唯我独黑31 分钟前
php -S 启动项目访问路由报错处理
开发语言·php
清水迎朝阳31 分钟前
Qt 小白成长系列 1-- 官方 文本搜索示例解析
开发语言·qt
Joe_Blue_0232 分钟前
Matlab入门案例介绍—常用的运算符及优先级
开发语言·数据结构·matlab·matlab基础入门案例介绍
降临-max37 分钟前
JavaWeb企业级开发---MySQL
java·开发语言·数据库·笔记·后端·mysql
一路往蓝-Anbo39 分钟前
C语言从句柄到对象 (八) —— 当对象会说话:观察者模式与事件链表
c语言·开发语言·数据结构·stm32·单片机·观察者模式·链表