# 为什么 SDK 中使用的是动态库而不是静态库？ (/zh-CN/reference/faq/integration/dynamic_or_static_library)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

声网实时互动 SDK 的早期版本在部分平台提供静态库，但在实际使用过程中，我们发现使用静态库存在以下问题：

- **编译冲突**：静态库可能造成第三方库之间出现符号冲突。例如，如果你的 App 和声网 SDK 一样使用了 `ffmpeg` 库，那么使用静态库必然存在符号冲突，导致 App 编译失败。

- **兼容性问题**：如果你的 App 和声网使用的第三方库版本不一致，有概率导致 App 崩溃。

- **合规问题**：声网实时互动 SDK 使用了一些开源协议的库，如 `ffmpeg` 库。根据开源协议要求，如果 SDK 是以静态库形式提供，开源协议会扩散到你的 App，意味着你的 App 也必须开源。为了符合开源协议规范，我们只能使用动态库。

为了解决上述问题，同时也为了顺应 RTC 行业普遍使用动态库的趋势，声网实时互动 SDK 全平台仅提供动态库。

## 参考信息 [#参考信息]

### 静态库和动态库的区别 [#静态库和动态库的区别]

动态库（Dynamic Link Library，DLL）和静态库（Static Library）是两种不同的库文件，用于在编程中组织和共享代码。它们之间的主要区别在于链接的时机和方式。

| 对比项               | 静态库                                                       | 动态库                                                       |
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| 链接时机   | 在编译时将库的代码和程序的代码合并在一起，形成一个独立的可执行文件。 | 在编译时不会将库的代码合并到可执行文件中，而是在运行时动态加载。 |
| 空间占用   | 会增加可执行文件的大小，因为库的代码被完全复制到可执行文件中，因此占用更多的磁盘空间。 | 可执行文件的大小相对较小，因为它只包含对动态库的引用，而不包含实际代码，可节省磁盘空间。 |
| 运行效率 | 在编译时已经链接到可执行文件，因此在运行时不需要额外的加载步骤，程序启动速度可能会更快。 | 在运行时需要动态加载，操作系统会在程序启动时或在需要时将动态库加载到内存中，因此程序启动速度可能会稍慢，但程序运行时可以节省内存空间。 |
| 更新和维护 | 库更新后，需要重新编译程序以使用新版本的库。             | 库更新后，仅需要更新动态库文件，无需重新编译。           |
| 共享性     | 代码被静态复制，因此每个使用该库的程序都有自己的一份库的副本。 | 多个程序可以共享同一份动态库的实例，因为动态库在内存中只有一份。 |

### 相关文档 [#相关文档]

[减小 App 体积 - 插件动态库列表](/zh-CN/realtime-media/rtc/build/optimize-and-operate/reduce-app-size)
