c++的动态库(.so/.dll)和静态库(.a/.lib)有什么区别 如何创建和使用【链接器】

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

c++的动态库(.so/.dll)和静态库(.a/.lib)有什么区别 如何创建和使用【链接器】-第1张图片-佛山资讯网

动态库和静态库的核心区别在于代码何时被合并到可执行文件中:静态库在编译链接阶段就把代码直接复制进去,生成的程序自带所有依赖;动态库则只在编译时记录“需要哪些符号”,实际代码留在外部文件里,运行时(或加载时)才由操作系统映射进内存。

静态库:编译时打包,独立但体积大

静态库是目标文件(.o/.obj)的归档集合,Linux 下是 .a 文件(如 libmath.a),Windows 下常见 .lib(不含导出表的那种)。它不包含运行时逻辑,只是“代码仓库”。

  • 创建方式(Linux 示例):
    g++ -c add.cpp -o add.o
    ar rcs libmath.a add.o sub.oar 打包,rcs 表示创建、替换、索引)
  • 使用方式(链接时指定):
    g++ main.cpp -L. -lmath -o app → 链接器从当前目录(-L.)找 libmath.a,并解析其中的 addsub 符号
  • 特点:生成的可执行文件可脱离库文件运行;多个程序用同一静态库会各自保留一份副本,浪费磁盘和内存;更新库需重新编译全部依赖程序。

动态库:运行时加载,共享但有依赖

动态库是已重定位的机器码模块,Linux 下为 .so(shared object),Windows 下为 .dll(dynamic-link library)。它包含符号表、重定位信息和初始化/清理入口,能被多个进程共享内存页。

标签: linux windows 操作系统 app 工具 ai c++ win 区别 环境配置 red

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~