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

相关推荐
划水的code搬运工小李5 分钟前
下载CSDN到PDF
开发语言·pdf·swift
不负岁月无痕8 分钟前
STL-- C++ stack_queue _priority_queue类 模拟实现
开发语言·c++
半个烧饼不加肉10 分钟前
JS 底层探究--上下文
开发语言·javascript·ecmascript
小满Autumn12 分钟前
依赖注入设计模式速查手册
开发语言·c#·wpf·mvvm·依赖注入
selt79117 分钟前
Redisson 源码深度分析
java·c++·redis·lua
周末也要写八哥20 分钟前
浅谈:C++中cpp 14 ~ cpp 17
开发语言·c++·算法
不会C语言的男孩24 分钟前
C++ Primer 第13章:拷贝控制
开发语言·c++
z落落27 分钟前
C# 静态成员 vs 非静态成员(调用规则+内存特点)+只读和常量 const常量 / readonly / static readonly 三者终极区别
java·开发语言·c#
zhangfeng113329 分钟前
超算中心 高性能计算 slurm的linux版本 centos7,如何安装docker,如何安装torch2.4
linux·运维·服务器·开发语言·人工智能·机器学习·docker
c2385631 分钟前
map和set
数据结构·c++