关于如何编译一个linux系统下的第三方库给ue使用
ue使用linux第三方c++库时十分麻烦,如果是纯c库的话直接在任意linux系统下编译后基本就能使用,当然还是用ue推荐的linux系统编译更好,比如Ubuntu 22.04。
c++标准库每发生一个小版本的变化,就会有无法互相调用的问题,必须使用ue提供的交叉编译工具在linux上进行编译才能正常使用,否则就会报错(稍后添加下报错文本,这样更方便别人搜索到这篇文章)。windows下如果你不是用ue源码进行编译,而是使用商场中下载的预编译好的引擎版本,也有概率出现无法链接第三方库的问题,你就必须要使用与预编译引擎相同的msvc版本编译第三方库,不然也有概率无法链接。
我们可以使用windows下的Ubuntu 22.04子系统(子系统请自行查阅教程)进行第三方库编译(Ubuntu 22.04是UE官方推荐,编译后在大部分linux系统下都能正常运行,我的主要需求是在麒麟系统下运行,经过测试也没问题),当然你要不嫌卡直接在真机系统上下载linux版本ue来测试编译也行,linux的ue建议下载源码版,ue的linux预编译版本经常莫名无法启动,源码版本可以随时修改来跳过这些错误。
本教程是基于vcpkg的,至于如何直接通过cmake或vscode编译第三方库,暂时我也没有方案,想要其他方案的可以不用往下看了(也有通过抽象第三方库功能成接口,使用c风格编码,编译成动态链接库so来规避链接错误的方法,改天有时间再单独写一篇文章)。
首先我们需要下载Cross-Compile Toolchain(ue的linux交叉编译工具链,用于windows下编译linux版本),如果我们使用的预编译版本ue,直接在商城里下载linux的支持,源码版本的ue在windows下怎么操作我还不会。然后我们需要下载Native Toolchain(ue的linux原生编译工作链,用它在linux上编译第三方库)。ue5通过这个链接进行下载https://dev.epicgames.com/documentation/en-us/unreal-engine/linux-development-requirements-for-unreal-engine,ue4通过这个链接进行下载https://dev.epicgames.com/documentation/en-us/unreal-engine/cross-compiling-for-linux?application_version=4.27。

然后需要下载这个批处理程序(https://files.cnblogs.com/files/menghuijinxi/vcpkg.zip?t=1750236732&download=true),这个批处理程序是通过引擎中的proj模块改过来的,他会通过下载vcpkg中的包,然后通过ue提供的linux远程编译工具链进行编译,这样编译过后的库在ue中使用时就不会报错了。我们还需要拷贝引擎下的一个模块:Engine/Source/ThirdParty/Unix,着整个文件夹都会用到。
1.创建一个文件夹,比如叫linuxTest
2.在linuxTest下创建一个文件夹vcpkg,把批处理程序解压到vcpkg文件夹下

3.再在linuxTest下创建一个文件夹叫ThirdParty,把 Engine/Source/ThirdParty/Unix模块拷贝进去


4.在linuxTest下创建以下路径:ThirdPartyNotUE\SDKs\HostLinux\Linux_x64
将native-linux-v22_clang-16.0.6-centos7.tar.gz(注意我这文件是5.3的,解压自己需要的版本)文件解压到ThirdPartyNotUE\SDKs\HostLinux\Linux_x64目录下

5.编辑vcpkg.sh,在图中的位置设置你需要的第三方库,比如我需要编译ffmpeg库

6.打开你的linux子系统,或者linux真机的控制台,直接运行vcpkg.sh。
7.运行会你会发现打印了UE_SDKS_ROOT envvar not set or specifies non-existant location错误。

8.这里就需要我们将两个环境变量指向我们刚才创建的两个文件夹了:
export UE_SDKS_ROOT=/tmp/ThirdPartyNotUE/SDKs
export LINUX_MULTIARCH_ROOT=/tmp/ThirdPartyNotUE/SDKs/HostLinux/Linux_x64/v22_clang-16.0.6-centos7
9.然后我们再执行git clone https://github.com/microsoft/vcpkg.git命令拉去下vcpkg,期间大概率需要FQ,这个批处理会从github上下载你需要的第三方库以及所有依赖的库。

拉取成功后再执行bash vcpkg/bootstrap-vcpkg.sh命令

10.再次运行bash vcpkg.sh命令,就可以等待库的编译了,期间可以会因为网络问题多次下载中断,每次下载失败删除下vcpkg-installed文件就行了,还有很多库和ue提供的编译器有不兼容的问题,十分麻烦没有统一的解决方案,需要一点一点的慢慢解决,我经常编译一个库解决编译错误都能花上一周时间。
11.编译完成后,在vcpkg-installed/overlay-x64-linux下拷贝编译好的.o或者.so到ue中,然后链接上即可使用了。

浙公网安备 33010602011771号