我正在开发 UE4 插件,并且想要使用 Eigen 库。看来UE4已经集成了这个库,你可以在Engine>Source>ThirdParty>Eigen中看到。
我查看了其他插件,例如 AlembicImporter,以获取指导。为了使用 Eigen,我看到他们在 build.cs 文件中添加了
"Eigen"
,并在使用 Eigen 的源文件中写入 #include <Eigen/...>
,其中 ...
可以是 Dense、SVD、Sparse 等。
我尝试过这个,但是当我构建我的项目时,我收到错误
fatal error: 'Eigen/Dense' file not found
(同样,我尝试使用的任何
Eigen/...
都会出现错误)
看起来预构建的 UE4 不包含“编译的”Eigen 标头(“Dense”、“Sparse”等),尽管它确实包含 Eigen“src”文件夹。
如果您从源代码编译引擎,则应该在 ThirdParty 文件夹中安装完整的 Eigen。然后您可以像各种引擎插件一样使用它。但是从源代码编译 Unreal 有点麻烦,并且需要大量的硬盘空间。这也会阻止您以源代码形式分发插件,因为普通用户无法使用 Eigen。
在您的插件中包含 Eigen 的本地副本可能是最简单的 - 它只是标头,因此您可以将其包含在 build.cs 中的私有包含路径中。
我找到了解决方案。我们不需要下载 Eigen 库来包含在插件中;我们可以简单地使用虚幻引擎内置的UE5.4版本。当您使用下载的 Eigen 库时,它可以在编辑器中运行,但打包项目并打开后,在调用与 Eigen 相关的函数时,项目会崩溃。我认为这是由于虚幻引擎的内存分配与 Eigen 库的内存分配不同造成的。 在
YourPlugin.Build.cs
:
// Use Unreal Engine built-in Eigen as a third-party dependency
AddEngineThirdPartyPrivateStaticDependencies(Target, "Eigen");
如果在项目打包过程中遇到与无法访问代码相关的错误,可以抑制该错误并继续编译。
也在
YourPlugin.Build.cs
:
// Suppress compiler warning C4702 for unreachable code
PublicDefinitions.Add("EIGEN_IGNORE_UNREACHABLE_CODE_WARNING=1");
要抑制本地代码中的警告:
#pragma warning(push)
#pragma warning(disable : 4702) // Disable unreachable code warning
#include "Eigen/Dense"
#pragma warning(pop)