当前位置: 首页 > news >正文

静态库与动态库

静态库(Static Library)
  • 定义:静态库(如 .a 文件或 .lib 文件)是编译时直接链接到可执行文件中的库。其代码和数据会被完整复制到最终的可执行文件中。

  • 特点

    • 独立部署:无需依赖外部库文件。

    • 体积较大:每个使用静态库的程序都包含库的副本。

    • 更新困难:库更新需重新编译整个程序。

  • 示例

    bash

    复制

    # 编译静态库
    g++ -c mylib.cpp -o mylib.o
    ar rcs libmylib.a mylib.o
    # 链接静态库
    g++ main.cpp -L. -lmylib -o main
动态库(Dynamic Library/Shared Library)
  • 定义:动态库(如 .so 文件或 .dll 文件)在程序运行时加载,多个程序可共享同一份库文件。

  • 特点

    • 节省内存:多个进程共享同一内存中的库代码。

    • 灵活更新:替换动态库文件后,所有依赖程序自动生效。

    • 依赖管理:需确保运行时环境包含正确版本的库。

  • 示例

    bash

    复制

    # 编译动态库
    g++ -shared -fPIC mylib.cpp -o libmylib.so
    # 链接动态库
    g++ main.cpp -L. -lmylib -o main

静态连接与动态连接

静态连接(Static Linking)
  • 过程:将静态库的代码和数据直接复制到可执行文件中。

  • 优点

    • 程序独立,无需运行时环境支持。

    • 性能略高(无运行时加载开销)。

  • 缺点

    • 可执行文件体积大。

    • 库更新需重新编译程序。

动态连接(Dynamic Linking)
  • 过程:在程序运行时加载动态库,通过符号表解析依赖。

  • 优点

    • 节省磁盘和内存空间。

    • 支持库的热更新。

  • 缺点

    • 依赖环境配置(如 LD_LIBRARY_PATH)。

    • 首次加载有轻微性能开销。

相关文章:

  • 整理一些大模型部署相关的知识
  • 对责任链模式的理解
  • 7.4 SVD 的几何背景
  • JCR一区文章,壮丽细尾鹩莺算法Superb Fairy-wren Optimization-附Matlab免费代码
  • 介质访问控制——信道划分
  • from fastmcp import FastMCP和from mcp.server.fastmcp import FastMCP的区别是什么?
  • C51单片机学习笔记——LCD1602调试
  • SEO长尾关键词优化策略
  • 语法: value=kbhit( );和 value=kbhit( stream );
  • 10天速通强化学习-009--DDPG、SAC、TD3
  • 闭包和装饰器
  • 工业自动化领域边缘计算机崛起:PLC 替代之势渐显
  • 基于spring boot 鲜花销售系统PPT(源码+lw+部署文档+讲解),源码可白嫖!
  • 微软主要收入云计算,OFFICE,操作系统和游戏10大分类
  • 【项目管理】第2章 信息技术发展 --知识点整理
  • AutowiredAnnotationBeanPostProcessor
  • AIDD-人工智能药物设计-双扩散模型结合多目标优化策略助力3D小分子药物设计
  • 产品经理课程
  • Go语言常用算法实现
  • c++进阶--c++11
  • 想建网站/厦门人才网官网招聘信息网
  • 学做美食饮品网站/国外免费舆情网站有哪些软件
  • 包头网站建设 奥北/会员制营销
  • 做网站签订合同/谷歌浏览器下载安装
  • 如何替换网站ico图标/流量宝官网
  • 美食网站建设/整合营销包括哪些内容