静态库在编译链接时将代码直接复制进可执行文件,生成独立但体积大的程序;动态库仅在编译时记录符号引用,运行时由操作系统加载共享代码,节省资源但依赖环境。

动态库和静态库的核心区别在于代码何时被合并到可执行文件中:静态库在编译链接阶段就把代码直接复制进去,生成的程序自带所有依赖;动态库则只在编译时记录“需要哪些符号”,实际代码留在外部文件里,运行时(或加载时)才由操作系统映射进内存。
静态库:编译时打包,独立但体积大
静态库是目标文件(.o/.obj)的归档集合,Linux 下是 .a 文件(如 libmath.a),Windows 下常见 .lib(不含导出表的那种)。它不包含运行时逻辑,只是“代码仓库”。
- 创建方式(Linux 示例):
g++ -c add.cpp -o add.oar rcs libmath.a add.o sub.o(ar打包,rcs表示创建、替换、索引) - 使用方式(链接时指定):
g++ main.cpp -L. -lmath -o app→ 链接器从当前目录(-L.)找libmath.a,并解析其中的add、sub符号 - 特点:生成的可执行文件可脱离库文件运行;多个程序用同一静态库会各自保留一份副本,浪费磁盘和内存;更新库需重新编译全部依赖程序。
动态库:运行时加载,共享但有依赖
动态库是已重定位的机器码模块,Linux 下为 .so(shared object),Windows 下为 .dll(dynamic-link library)。它包含符号表、重定位信息和初始化/清理入口,能被多个进程共享内存页。
标签: linux windows 操作系统 app 工具 ai c++ win 区别 环境配置 red
还木有评论哦,快来抢沙发吧~