cmake 动态库和静态库的区别
时间: 2025-01-04 16:17:10 浏览: 16
### CMake 构建动态库与静态库的区别
#### 定义和特性
动态库(Shared Library)是在程序运行时加载到内存中的共享资源,多个应用程序可以同时使用同一个副本。这减少了磁盘空间占用并允许更新单一位置来影响所有依赖的应用程序[^2]。
静态库(Static Library)则是在编译阶段被链接进可执行文件内部的一部分,在最终生成的二进制文件中包含了该库的所有代码。这意味着每个使用此静态库创建出来的独立应用都会携带一份完整的库拷贝[^1]。
#### 创建过程差异
对于动态库而言,通过`add_library()`命令指定第二个参数为`SHARED`,告知CMake需要构建的是一个动态库:
```cmake
add_library(my_shared SHARED src/mylib.cpp)
```
而针对静态库,则将第二参数设成`STATIC`:
```cmake
add_library(my_static STATIC src/mystaticlib.cpp)
```
当省略第二个参数,默认情况下会按照平台惯例处理——通常意味着创建静态库。
#### 文件形式不同
在Linux/Unix环境下,动态库一般具有`.so`(shared object)扩展名;而在Windows上则是`.dll`(Dynamic Link Library)[^3]。相对应地,静态库分别对应于`.a` (archive file) 和 `.lib` 扩展名。
#### 链接方式的不同
使用静态库时,目标文件会被直接嵌入至最终产物之中,因此不需要额外分发任何其他支持文件给终端用户即可正常工作。
相反,采用动态库的情况下,除了提供主程序外还需要附带相应的.so 或 .dll 文件以便于运行期间能够找到这些外部依赖项完成加载操作。
阅读全文