|
|
@@ -11,6 +11,24 @@ |
|
|
|
- 对**运行时环境控制严格**的系统 |
|
|
|
- **性能敏感**且**无需热更新**的模块 |
|
|
|
|
|
|
|
**优点** |
|
|
|
|
|
|
|
独立性:可执行文件包含所有依赖,无需外部库文件,部署简单。 |
|
|
|
|
|
|
|
性能:函数调用无额外开销(无动态链接加载过程)。 |
|
|
|
|
|
|
|
兼容性:避免版本冲突(如“DLL Hell”问题)。 |
|
|
|
|
|
|
|
代码优化:编译器可进行全程序优化(LTO)。 |
|
|
|
|
|
|
|
**缺点:** |
|
|
|
|
|
|
|
体积大:相同库代码被多次复制到不同程序,占用磁盘/内存。 |
|
|
|
|
|
|
|
更新困难:库更新需重新编译所有依赖它的程序。 |
|
|
|
|
|
|
|
内存浪费:多个进程无法共享同一库的物理内存。 |
|
|
|
|
|
|
|
#### 1.2静态库的生成 |
|
|
|
|
|
|
|
第一,创建新项目,选择静态库。 |
|
|
@@ -49,6 +67,26 @@ |
|
|
|
|
|
|
|
动态库(Dynamic Link Library, DLL / Shared Object, SO)是一种**在程序运行时才被加载的代码库**,允许多个程序共享同一份内存中的库副本 |
|
|
|
|
|
|
|
**优点:** |
|
|
|
|
|
|
|
节省资源:多个进程共享同一库,减少内存/磁盘占用。 |
|
|
|
|
|
|
|
更新灵活:更新库文件后,所有程序自动使用新版本(需兼容)。 |
|
|
|
|
|
|
|
模块化:支持插件机制(运行时加载)。 |
|
|
|
|
|
|
|
热修复:可替换库文件修复问题(无需重编译程序)。 |
|
|
|
|
|
|
|
**缺点:** |
|
|
|
|
|
|
|
部署复杂:需确保目标系统存在正确版本的库(依赖管理)。 |
|
|
|
|
|
|
|
版本冲突:不同程序依赖同一库的不兼容版本(如DLL Hell)。 |
|
|
|
|
|
|
|
性能损耗:首次加载需地址重定位,轻微运行时开销。 |
|
|
|
|
|
|
|
安全性:恶意替换库文件可能导致安全隐患。 |
|
|
|
|
|
|
|
#### 2.2动态库的生成 |
|
|
|
|
|
|
|
##### 2.2.1通过导出语句生成 |
|
|
|