云计算百科
云计算领域专业知识百科平台

库文件动态链接库概念(DLL、SO)解析

DLL/SO库概念

DLL(Dynamic Link Library)

DLL是Windows操作系统中的动态链接库,包含可由多个程序同时使用的代码和数据。DLL不是独立的可执行文件,而是由其他程序调用。

主要特点:

  • 文件扩展名:.dll
  • Windows平台专用
  • 允许多个程序共享代码和资源
  • 减少内存占用和磁盘空间

SO(Shared Object)

SO是Linux/Unix系统中的共享对象文件,功能类似于Windows的DLL。

主要特点:

  • 文件扩展名:.so
  • Linux/Unix平台专用
  • 支持动态链接和加载
  • 常用于模块化应用程序

对比

概念平台扩展名主要用途
DLL Windows .dll Windows动态链接库
SO Linux/Unix .so Unix/Linux共享对象
DYLIB macOS .dylib macOS动态库
Framework macOS/iOS .framework macOS/iOS捆绑包
LIB 多平台 .lib/.a 静态链接库

关系图解

#mermaid-svg-aYJpYacH8jTpkuGH{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-aYJpYacH8jTpkuGH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-aYJpYacH8jTpkuGH .error-icon{fill:#552222;}#mermaid-svg-aYJpYacH8jTpkuGH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-aYJpYacH8jTpkuGH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-aYJpYacH8jTpkuGH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-aYJpYacH8jTpkuGH .marker.cross{stroke:#333333;}#mermaid-svg-aYJpYacH8jTpkuGH svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-aYJpYacH8jTpkuGH p{margin:0;}#mermaid-svg-aYJpYacH8jTpkuGH .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-aYJpYacH8jTpkuGH .cluster-label text{fill:#333;}#mermaid-svg-aYJpYacH8jTpkuGH .cluster-label span{color:#333;}#mermaid-svg-aYJpYacH8jTpkuGH .cluster-label span p{background-color:transparent;}#mermaid-svg-aYJpYacH8jTpkuGH .label text,#mermaid-svg-aYJpYacH8jTpkuGH span{fill:#333;color:#333;}#mermaid-svg-aYJpYacH8jTpkuGH .node rect,#mermaid-svg-aYJpYacH8jTpkuGH .node circle,#mermaid-svg-aYJpYacH8jTpkuGH .node ellipse,#mermaid-svg-aYJpYacH8jTpkuGH .node polygon,#mermaid-svg-aYJpYacH8jTpkuGH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-aYJpYacH8jTpkuGH .rough-node .label text,#mermaid-svg-aYJpYacH8jTpkuGH .node .label text,#mermaid-svg-aYJpYacH8jTpkuGH .image-shape .label,#mermaid-svg-aYJpYacH8jTpkuGH .icon-shape .label{text-anchor:middle;}#mermaid-svg-aYJpYacH8jTpkuGH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-aYJpYacH8jTpkuGH .rough-node .label,#mermaid-svg-aYJpYacH8jTpkuGH .node .label,#mermaid-svg-aYJpYacH8jTpkuGH .image-shape .label,#mermaid-svg-aYJpYacH8jTpkuGH .icon-shape .label{text-align:center;}#mermaid-svg-aYJpYacH8jTpkuGH .node.clickable{cursor:pointer;}#mermaid-svg-aYJpYacH8jTpkuGH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-aYJpYacH8jTpkuGH .arrowheadPath{fill:#333333;}#mermaid-svg-aYJpYacH8jTpkuGH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-aYJpYacH8jTpkuGH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-aYJpYacH8jTpkuGH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aYJpYacH8jTpkuGH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-aYJpYacH8jTpkuGH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aYJpYacH8jTpkuGH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-aYJpYacH8jTpkuGH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-aYJpYacH8jTpkuGH .cluster text{fill:#333;}#mermaid-svg-aYJpYacH8jTpkuGH .cluster span{color:#333;}#mermaid-svg-aYJpYacH8jTpkuGH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-aYJpYacH8jTpkuGH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-aYJpYacH8jTpkuGH rect.text{fill:none;stroke-width:0;}#mermaid-svg-aYJpYacH8jTpkuGH .icon-shape,#mermaid-svg-aYJpYacH8jTpkuGH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-aYJpYacH8jTpkuGH .icon-shape p,#mermaid-svg-aYJpYacH8jTpkuGH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-aYJpYacH8jTpkuGH .icon-shape rect,#mermaid-svg-aYJpYacH8jTpkuGH .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-aYJpYacH8jTpkuGH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-aYJpYacH8jTpkuGH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-aYJpYacH8jTpkuGH :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

库文件 Libraries

静态库 Static Libraries

动态库 Dynamic Libraries

Windows: .lib

Linux/Unix: .a

Windows: DLL .dll

Linux/Unix: SO .so

macOS: DYLIB .dylib

macOS/iOS: Framework .framework

运行时动态加载

减少内存占用

模块化开发

便于更新

评价

特性静态库动态库
链接时机 编译链接时 运行时
文件大小 可执行文件较大(包含库代码) 可执行文件较小(不包含库代码)
内存占用 每个程序独立占用内存 多个程序共享内存中的库代码
部署复杂度 简单(单个可执行文件) 复杂(需要确保动态库存在且版本兼容)
更新维护 需要重新编译整个程序 只需替换动态库文件(需注意ABI兼容)
加载速度 启动快(代码已在可执行文件中) 启动稍慢(需要加载动态库)
版本兼容 无版本问题(代码已固定) 有版本依赖和兼容性问题
平台移植 可能较大(包含所有库代码) 较小(可依赖系统库)
示例文件 Windows: .lib, Linux: .a Windows: .dll, Linux: .so, macOS: .dylib

.不同场景需求

  • 静态库适用场景:

    • 需要独立部署的应用程序
    • 对启动速度要求高的场景
    • 避免依赖环境问题的场景(如一些安装包)
    • 嵌入式系统资源有限的环境
  • 动态库适用场景:

    • 大型系统,多个程序共享相同功能
    • 需要热更新或插件化架构
    • 系统库(如C运行时库)
    • 减少磁盘和内存占用的场景

总结

DLL和SO都是实现代码共享和模块化编程的重要机制,主要区别在于目标平台不同。它们都属于动态链接库的范畴,与静态库形成对比。现代软件开发中,动态链接库因其灵活性和资源效率而被广泛使用,尤其是在大型应用程序和操作系统组件中。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 库文件动态链接库概念(DLL、SO)解析
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!