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








评论前必须登录!
注册