问题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" 系统找不到指定的文件)如下图:
原因分析:未把自己的项目设置为启动项目。
解决方案:将自己的项目设置为启动项目即可。
问题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
问题1:error LNK2019: 无法解析的外部符号 LNK1120: 1 个无法解析的外部命令原因:使用了某些函数,但是在<项目名.Build.cs>文件中却未添加相关模块。解决方案:在<项目名.Build.cs>文件中添加相关模块。问题2:项目编译成功,但进行Debug时在构造函数某一语句中出现断点原因:可能是执行该语句时引擎有些东西没有加载好。解决方案:将改语句从构造函数剪切至BeginPlay函数中。...
1、no 32-bit compile ......
(很可能是VS或者其他你用的编译器安装的时候没有装
C++
组件。我用的VS2015,
解决方案
是:打开VS2015,新建项目--新建
C++
项目,此时它会提示你没有安装
C++
必要的支持组件。然后点go,它会自动帮你安装。)
2、UBT ...
Running D:/my_program/Epic Games/
UE4
.21/
UE
_4.21/Engine/Binaries/DotNET/UnrealBuildTool.exe -projectfiles -project="C:/Users/Administrator/Documents/Unreal Projects/***/****.uproject" -game -rocket -progress
使用
UE4
创建
C++
项目,提示上面错误信息。
解决方法:
如果你尝试了以下几种方法:
它提示类已经创建成功,但是要重新编译,但是我编译以后还是没有出现。随后我又查看了日志。
日志中在这两个文件中出现错误,可是这俩文件我也不知道是干啥的,研究了好久也没研究明白,心一横,直接把这俩文件删除了,随后再新建
c++
类就可以成功了。
解决方法就是把这俩文件删除,但是具体原因是怎样的,我是没搞明白,如果有大佬知道原理,还请讲解一下。
关于
UE4
中
C++
项目的C1853错误
在前一阵子更新了Visual Studio之后,编译
UE4
C++
项目的时候遇到错误C1853,无论如何修改代码均无用处。
错误提示为:
C1853【FirstCppProject\Intermediate\Build\Win64\FirstCppProjectEditor\Development\Engine\SharedPCH.Engine.h.pch”预编头文件来自编译器的早期版本,或者预编译头为
C++
而在 C 中使用它(或相反)】
删除错误提示中的
这个例子定义了一个名为`AMyActor`的类,它继承自`AActor`,并包含了一个名为`MyVariable`的浮点数变量。它还覆盖了`BeginPlay`和`Tick`函数,这些函数将在Actor启动时以及每帧调用。此外,它还有一个默认的构造函数。
在`.cpp`文件中,你可以实现这些函数的具体内容。例如:
```
c++
#include "MyActor.h"
// 构造函数
AMyActor::AMyActor()
// 设置默认值
MyVariable = 0.f;
// 每帧调用
void AMyActor::Tick(float DeltaTime)
Super::Tick(DeltaTime);
// 在这里添加每帧的逻辑代码
// Actor启动时调用
void AMyActor::BeginPlay()
Super::BeginPlay();
// 在这里添加Actor启动时的逻辑代码
这些代码将在Actor启动时和每帧调用时执行。你可以在这些函数中添加自己的逻辑代码,以实现想要的行为。