# 将静态库编译为 Unity 插件

> Call functions from a static library.

您可以使用 Emscripten 编译库并使用 Unity 中的库。从封装 C++ 代码的库调用函数可能比从插件目录直接调用 C++ 代码更有益。优点包括：

* 代码更容易与 Web Unity 项目集成。
* 与从 C++ 代码调用函数相比，代码性能更好，特别是对于较大的库。
* 可以在各种项目中重用代码。

## 在 Unity 中使用静态库的步骤##steps-to-use-a-static-library-in-unity

要编译可用作 Unity 插件的静态库，请执行以下操作：

1. [下载 Emscripten SDK](#download-emscripten)
2. [配置所有现有项目脚本](#configure-compiler)
3. [更新编译器选项](#compiler-options)
4. [编译和导入静态库文件](#import-c-files)
5. [从 C# 脚本调用静态库函数](#call-static-libr)

### 1.下载 Emscripten SDK##1.-download-the-emscripten-sdk

必须下载与您的 Unity 版本匹配的 Emscripten SDK。

要查找适用于您的 Unity 版本的 Emscripten 合适版本，请参阅[用于 Emscripten 的 Web 原生插件](/engine/6000.0/manual/platform-specific/webgl/develop/native-plugins-with-emscripten.md)。

有关下载链接以及有关如何安装 Emscripten SDK 的更多信息，请参阅[下载和安装](https://emscripten.org/docs/getting_started/downloads.html) (Emscripten)。

### 2.配置所有现有项目脚本##2.-configure-any-existing-project-scripts

Emscripten 可以替代 gcc 或 clang 编译器。如果存在现有 C/C++ 代码，则需要在 C++ 项目中进行以下更改：

* 使用“emcc”作为 C/C++ 编译器
* 使用“emar”作为静态链接器

详情请参阅有关[编译和运行项目](https://emscripten.org/docs/compiling/index.html)的 Emscripten 文档。

### 3.更新编译器选项##3.-update-your-compiler-options

如果 Unity 项目具有以下**播放器 (Player)** 设置，可能需要向 C/C++ 项目添加部分编译器选项（播放器设置菜单：**编辑 (Edit)** > **项目设置 (Project Settings)** > **播放器 (Player)**）。

| 属性                                     | 描述                                                                                                                         |
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Enable Exceptions**                  | 如果此属性设置为**无 (None)**，请添加编译器选项“-fno-exceptions”。                                                                            |
| **Enable Native C/C++ Multithreading** | 如果启用此属性，请包含编译器选项“-pthread”。                                                                                                |
| **Enable WebAssembly 2023**            | 如果启用此属性，请包含以下编译器选项："-fwasm-exceptions""-sSUPPORT\_LONGJMP=wasm""-mbulk-memory""-mnontrapping-fptoint""-msimd128""-msse4.2" |

### 4.编译和导入静态库文件##4.-compile-and-import-your-static-library-files

编译静态库文件，然后将文件导入 `Assets/Plugins` 文件夹中的 Unity 项目。

**注意**：如果没有 **Plugins** 文件夹，则需要创建自己的文件夹。

### 5.从 Unity C# 脚本调用静态库函数##5.-call-your-static-library-functions-from-unity-c-scripts

您可以从 Unity C# 脚本中调用静态库函数。调用函数的方式与从 C# 脚本调用 C 或 C++ 函数的方式相同。有关示例，请参阅[从 Unity C# 脚本调用 C/C++/C# 函数](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browsers-c-to-unity.md)。

## 其他资源##additional-resources

* [与浏览器脚本交互](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting.md)

* [设置 JavaScript 插件](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-js.md)

* [从 Unity C# 脚本调用 JavaScript 函数](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-js-to-unity.md)

* [从 JavaScript 调用 Unity C# 脚本函数](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-unity-to-js.md)

* [在 Unity C#、JavaScript 和 C/C++/C# 代码之间创建回调](/engine/6000.0/manual/platform-specific/webgl/develop/interactingwithbrowserscripting/web-interacting-browser-example.md)
