虚幻引擎中的链接错误

3

免责声明:这可能与虚幻引擎有很大关系,但我在那里没有得到答案,所以我想在这里尝试一个更一般性的查询。如果这被认为是离题或太具体了,请谅解。

我在虚幻引擎4中编译以下代码时遇到了链接错误:

RHISetRenderTarget(TextureRenderTarget->GetRenderTargetTexture(), NULL);

这是在宏内部调用的 (ENQUEUE_UNIQUE_RENDER_COMMAND_TWOPARAMETER),但即使不这样做,也会出现链接错误。
链接错误本身是:
MaterialToTextureRenderer.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl RHISetRenderTargets(unsigned int,class FRHIRenderTargetView const *,class FRHITexture *,unsigned int,class FRHIUnorderedAccessView * const *)" (__imp_?RHISetRenderTargets@@YAXIPEBVFRHIRenderTargetView@@PEAVFRHITexture@@IPEBQEAVFRHIUnorderedAccessView@@@Z) referenced in function "void __cdecl RHISetRenderTarget(class FRHITexture *,class FRHITexture *)" (?RHISetRenderTarget@@YAXPEAVFRHITexture@@0@Z)

为了方便阅读,进行了压缩:

unresolved external symbol: void RHISetRenderTargets(unsigned int, FRHIRenderTargetView const *,FRHITexture *,unsigned int,FRHIUnorderedAccessView * const *)
referenced in: void RHISetRenderTarget(FRHITexture *,FRHITexture *)

(未链接方法被引用的方法是我正在调用的方法)。
还有4个类似的链接错误。
我并不是C++专家,但我的理解是,当头文件被正确包含,但找不到要指向的方法实现时,就会导致链接错误。
我不明白的是,无法找到其实现的方法在虚幻引擎中(我假设实际上没有缺少方法实现等!)。
此外,我调用的方法和它调用的方法(无法连接)都在同一个头文件中定义为inline。唯一可能出错的地方就是使用的方法在头文件中进一步声明和实现,但我不认为这可能是问题(肯定不是链接问题)。

你是否添加了包含该函数的 .lib 文件? - Matt
我有点假设,因为Unreal构建VS .sln文件,它正在处理所有这类事情。此外,由于实际未链接的方法与引用它的方法在同一个文件中,那么它仍然可能是缺少的lib文件吗? - T. Kiley
可能是由于缺少或不匹配的库文件导致的错误。 - Matt
如果错误是链接RHISetRenderTarget(FRHITexture*,FRHITexture*)失败,我会接受它,但它是在该方法内部调用的方法链接失败。这是因为编译器没有将其他方法内联(例如太大),所以只有在强制查找库时才会出现这种情况吗? - T. Kiley
你在你的cpp文件中包含了"Runtime/RHI/Public/RHIUtilities.h"吗? - Pavel Pája Halbich
1个回答

4
请确保在您的目标 .build.cs 文件中包含 RHI 和 RenderCore,如下所示。
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "RHI", "RenderCore", "ShaderCore" });

这个答案在渲染核心中未解决的全局问题上帮了我一个大忙 :) - 0liveradam8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接