https://unreal.blog/how-to-include-any-third-party-library
Nov, 12 2020— #advanced
If you are wondering how to include any open source library into your game for any platform, this tutorial is for you.
Let's abstract and think about what options we have:
- Directly connect all third-party library files (declaration headers "*.h" and definition files "*.cpp").
- Compile third-party libraries separately for each platform (e.g. for win32 and win64, or armv7 and arm64).
Both of these options have their advantages and disadvantages. But when we try to directly include all open source library files, we may have lots of different problems, such as namespace conflicts and built-in method implementation problems unique to each platform. Today we will look at the second example because this is much easier to implement when we use a medium- or large-sized library for different platforms.
Important notes:
- The library should be static, not shared or dynamic, and consequently, should not have one of these extensions: "*.dll, *.so, *.dylib".
- The way the library is built assumes different platform architecture (for example, using the toolchain file).
- The library name should starts with "lib", for example "liblibrary.a".
- The folder name of the static library is recommended to have a CPU architecture, ex. "arm64-v8a" for ARM64. UnrealBuildTool may decide the folder for the exact platform packaging binaries by this.
First, you need to understand what platforms the game will be used for. If the platform for which you are compiling the library is the same as the target platform (for example, if you are doing on Windows x64 only for Windows x64), then you just need to compile the library in Visual Studio and go to the including library step. If not, use the following instruction.
Instruction by steps:
- Build the required files for the project described in the library documentation (for example, using CMake).
- Compile all required files using the correct compiler and toolchain file as needed. For example, for the android platform, you need to use the MinGW compiler and the official toolchain file from the Android NDK. For Windows, it's enough to compile in Visual Studio separately for each architecture (x32 and x64)
- Create plugin and include each library using the instruction below.
Now, you will have a ready headers and static library, which will probably have one of the following extensions: *.lib or *.a.
The next thing you need to create an empty plugin. How to do this is explained in this article.
Finally, all you have to do is to properly include it. You should copy-and-paste all of the headers and static librarie(s) to your plugin folder and in your [PluginName].Build.cs write the following code:
PrivateIncludePaths.AddRange("PluginFolder/LibraryHeadersFolder"); //to include headers for your library (*.h)
if (UnrealTargetPlatform.Win32 == Target.Platform || UnrealTargetPlatform.Win64 == Target.Platform) //decide the platform to package the binaries
{
PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "LibraryBinariesFolder", "Windows", "liblibrary.lib")); //the full path is "LibraryBinariesFolder/Windows/liblibrary.lib"
}
else if (UnrealTargetPlatform.Android == Target.Platform)
{
PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "LibraryBinariesFolder", "Android", "armeabi-v7a", "liblibrary.a")); //the full path is "LibraryBinariesFolder/Android/armeabi-v7a/liblibrary.a"
PublicAdditionalLibraries.Add(Path.Combine(ModuleDirectory, "LibraryBinariesFolder", "Android", "arm64-v8a", "liblibrary.a")); //the full path is "LibraryBinariesFolder/Android/arm64-v8a/liblibrary.a"
}
Afterwards, in your [ProjectName].Build.cs you need to include your plugin:
PrivateIncludePathModuleNames.AddRange(new string[] { "PluginName" });
Afterwards you can use all the necessary methods from the library.
'Development > Unreal Engine 4, 5' 카테고리의 다른 글
Unreal Logging (0) | 2022.03.22 |
---|---|
FString::ParseIntoArray - String 쪼개기(?) (0) | 2022.03.21 |
Third-Party Libraries - Unreal Engine 4 Documentation (0) | 2022.03.17 |
언리얼 엔진 프로젝트에서 C++ 클래스 삭제하기 (0) | 2021.06.08 |
Slate 코드 관련 (0) | 2021.06.04 |