# 정적 라이브러리를 Unity 플러그인으로 컴파일

> Call functions from a static library.

Emscripten을 사용하여 라이브러리를 컴파일하고 Unity에서 라이브러리를 사용할 수 있습니다. 플러그인 디렉토리에서 직접 C++ 코드를 호출하지 않고 C++ 코드를 캡슐화하는 라이브러리에서 함수를 호출하는 것이 더 유용할 수 있습니다. 이렇게 하면 다음과 같은 장점이 있습니다.

* 코드를 웹 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용 웹 네이티브 플러그인](/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++ 프로젝트를 다음과 같이 변경해야 합니다.

* C/C++ 컴파일러로 "emcc" 사용
* 정적 링커로 "emar" 사용

자세한 내용은 Emscripten의 [프로젝트 컴파일 및 실행](https://emscripten.org/docs/compiling/index.html) 기술 자료를 참조하십시오.

### 3. 컴파일러 옵션 업데이트##3.-update-your-compiler-options

Unity 프로젝트의 **Player** 설정(메뉴: **Edit** > **Project Settings** > **Player**)이 다음과 같이 설정되어 있는 경우 C/C++ 프로젝트에 일부 컴파일러 옵션을 추가해야 할 수 있습니다.

| 프로퍼티                                   | 설명                                                                                                                                            |
| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **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)
