【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即可。
总结
外部链接的问题根源在于没有
手动包含
或者
没有开放给外部使用
针对具体模块解决依赖问题即可