本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题1:error LNK2019: 无法解析的外部符号 LNK1120: 1 个无法解析的外部命令
原因1:使用了某些函数,但是在<项目名.Build.cs>文件中却未添加相关模块。
解决方案:在<项目名.Build.cs>文件中添加相关模块。
原因2:相关模块已添加,但相应类中未添加API宏。
解决方案:模块B要用模块A的类,模块A的类上要加上A_API,参见虚幻官方描述:
docs.unrealengine.com/4.26/zh-CN/…
问题2:项目编译成功,但进行Debug时在构造函数某一语句中出现断点
原因:可能是执行该语句时引擎有些东西没有加载好。
解决方案:将改语句从构造函数剪切至BeginPlay函数中。
问题3:Debug时想要查看变量,但vs显示变量被优化
原因:应该是引擎内部有优化变量的机制
解决方案:在需要查看变量值的代码块前面关闭优化,并在其后开启。
UE4引擎有写好的设置优化控制宏:
PRAGMA_DISABLE_OPTIMIZATION
{
此处为代码
}
PRAGMA_ENABLE_OPTIMIZATION
问题4:使用Visual Studio调试UE4项目时无法启动UE4,且报错(无法启动程序"……\UE4.exe" 系统找不到指定的文件)如下图:
原因分析:未把自己的项目设置为启动项目。
解决方案:将自己的项目设置为启动项目即可。
问题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)选项,如下图:
问题7:写插件时,以Object类为父类定义了一个新的类型,写好了.cpp和.h文件,但是编译时,找不到相应的函数实现。报错:error LINK2019: unresolved external symbol "..."
原因分析:文件夹结构不对,如下图所示,把.cpp文件放到了Public目录下,VS在编译时会找不到文件。(具体原理不清楚,以后有时间再研究,这里只记录表层原因)
解决方案:先关闭vs,手动调整磁盘中文件夹的结构为如下图(把.cpp文件放到Private文件夹下),然后右键UE4的.uproject文件,Generate一下vs项目,最后打开vs,进行编译就好了。
问题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
\