UE4 C++ 相关问题及解决方案汇总

问题1:error LNK2019: 无法解析的外部符号 LNK1120: 1 个无法解析的外部命令

原因1:使用了某些函数,但是在<项目名.Build.cs>文件中却未添加相关模块。

解决方案:在<项目名.Build.cs>文件中添加相关模块。

原因2:相关模块已添加,但相应类中未添加API宏。

解决方案:模块B要用模块A的类,模块A的类上要加上A_API,参见虚幻官方描述:

https://docs.unrealengine.com/4.26/zh-CN/ProgrammingAndScripting/ProgrammingWithCPP/Modules/API/

问题2:项目编译成功,但进行Debug时在构造函数某一语句中出现断点

原因:可能是执行该语句时引擎有些东西没有加载好。

解决方案:将改语句从构造函数剪切至BeginPlay函数中。

问题3:Debug时想要查看变量,但vs显示变量被优化

原因:应该是引擎内部有优化变量的机制

解决方案:在需要查看变量值的代码块前面关闭优化,并在其后开启。

UE4引擎有写好的设置优化控制宏:

PRAGMA_DISABLE_OPTIMIZATION

{

   此处为代码

}

PRAGMA_ENABLE_OPTIMIZATION

问题4:使用Visual Studio调试UE4项目时无法启动UE4,且报错(无法启动程序"……\UE4.exe" 系统找不到指定的文件)如下图:

原因分析:未把自己的项目设置为启动项目。

解决方案:将自己的项目设置为启动项目即可。

UE4 C++ 相关问题及解决方案汇总_第1张图片

问题5:Visual Studio编译UE4项目失败,报错:LogCompile : error : Failed to initialize the engine (PreInit failed)

原因分析:网上找到的分析说是建立来源时发生错误,自己也没看太懂,这里就copy一下。

2>C:\MyProj\Intermediate\ProjectFiles\LogCompile(0,0): Error  : Failed to initialize the engine (PreInit failed).
2>C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets(46,5): Error MSB3073 : The command "C:\Windows\System32\chcp.com 65001 >NUL 
 E:\UnrealEngine\Engine\Build\BatchFiles\Build.bat -Target="StarsEditor Win64 DebugGame -Project=\"C:\MyProj\MyProj.uproject\"" -Target="ShaderCompileWorker Win64 Development -Quiet" -WaitMutex -FromMsBuild" exited with code 3.

解决方案:原文中的描述是:删除Plugins目录中的所有中间文件。

我采取的步骤如下:(严格按照如下步骤进行,不要缺步骤或打乱顺序,否则VS编译时可能依然会报错)

1、删除工程中的Plugins文件夹,然后从远程库重新updata一份新的下来;

2、直接双击项目中的Unreal图标(使用官方引擎版本)对项目进行Rebuild;

3、进入UE4 Editor以后,点击Editor中的C++ 编译按钮,等待编译成功;

4、从UE4 Editor进入VS,生成解决方案,这时就可以成功编译了。

5、(可选:针对修改了引擎源码的)关闭Editor和VS,右键项目中的Unreal图标,切换到自制的引擎版本,然后重复上述2、3、4步骤,就可以在自制引擎下成功编译工程了。

附原文链接:[UE4]Engine Source Compilation Issues Collection

问题6:VS编译失败,报错:unresolved external symbol _main referenced in function "int _cdecl invovke _main(void)"

原因分析:项目平台设置错误。

解决方案:修改项目平台(Platform)选项,如下图:

UE4 C++ 相关问题及解决方案汇总_第2张图片

问题7:写插件时,以Object类为父类定义了一个新的类型,写好了.cpp和.h文件,但是编译时,找不到相应的函数实现。报错:error LINK2019: unresolved external symbol "..."

UE4 C++ 相关问题及解决方案汇总_第3张图片

原因分析:文件夹结构不对,如下图所示,把.cpp文件放到了Public目录下,VS在编译时会找不到文件。(具体原理不清楚,以后有时间再研究,这里只记录表层原因)

UE4 C++ 相关问题及解决方案汇总_第4张图片

解决方案:先关闭vs,手动调整磁盘中文件夹的结构为如下图(把.cpp文件放到Private文件夹下),然后右键UE4的.uproject文件,Generate一下vs项目,最后打开vs,进行编译就好了。

UE4 C++ 相关问题及解决方案汇总_第5张图片

问题8:写插件的slate时,在给组件(如可编辑文本)添加绑定时间时,编译报错:error C2039: 'AsShared': is not a member of "..."

原因分析:参考以下链接:

虚幻引擎4 CPP:“AsShared”:是不是“MyModule的” - VoidCC

Slate button causes the editor to hang when instantiated - C++ Programming - Unreal Engine Forums

解决方案:修改绑定部分的代码。

修改前:

修改后:

问题9:GC报错:Fatal error: UObject\GarbageCollection.cpp [Line: 575] Invalid object in GC

原因分析:TArray 数组中含有未被赋值定义且不为 nullptr 的 Object 指针。
解决方案:将 TArray 中未被赋值定义的 Object 指针均设为 nullptr。
参考链接:TArray: Fatal error: UObject\GarbageCollection.cpp [Line: 575] Invalid object in GC - AnswerHub - Unreal Engine Forums

 

你可能感兴趣的:(日常问题汇总,c++,UE4)