添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

问题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 个无法解析的外部命令原因:使用了某些函数,但是在&lt;项目名.Build.cs&gt;文件中却未添加相关模块。解决方案:在&lt;项目名.Build.cs&gt;文件中添加相关模块。问题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启动时和每帧调用时执行。你可以在这些函数中添加自己的逻辑代码,以实现想要的行为。