天天看点

【UE4】 unresolved external symbol 解决方案基础问题高阶问题总结

【UE4】 unresolved external symbol 解决方案

  • 基础问题
  • 高阶问题
  • 总结

基础问题

unresolved external symbol的出现是因为项目代码里使用到了其他模块,然而

xx.build.cs

文件中并没有添加对这些其他模块的依赖。

例如:

AI相关

,需要添加

AIModule

UMG相关

,需要添加

UMG

至于

PublicDependencyModuleNames

PrivateDependencyModuleNames

的区别在于是

.h

还是

.cpp

中使用到其他模块的代码,一般用PublicDependencyModuleNames就行。

高阶问题

可能你还会碰到即使在

*.build.cs

中添加了其他模块的名字,依旧报错的情况。

比如引擎中的

UPendingNetGame

这个类,你要是想要在自己代码中使用,需要包含

Engine

这个模块名,不过一般

*.build.cs

文件中都默认添加了,但是依旧存在

unresolved external symbol

的问题。

这是因为UE4的

UCLASS

必须包含

模块宏

,才能被其他模块使用,此处将

class UPendingNetGame的定义中添加

模块宏ENGINE_API

(模块名大写_API),因为属于Engine模块,至于到底属于哪个模块可以看相应代码对应的

*.build.cs

文件中的定义

public class 模块名: ModuleRules

改成

class

ENGINE_API

UPendingNetGame

后发现还会有编译错误,那是因为该文件中有个

SetEncryptionKey

函数被单独开启了模块宏,只需要去掉该函数前面的ENGINE_API即可。

总结

外部链接的问题根源在于没有

手动包含

或者

没有开放给外部使用

针对具体模块解决依赖问题即可

继续阅读