【UE4】 unresolved external symbol 解决方案

【UE4】 unresolved external symbol 解决方案

基础问题

unresolved external symbol的出现是因为项目代码里使用到了其他模块,然而xx.build.cs文件中并没有添加对这些其他模块的依赖。
例如:
AI相关,需要添加AIModule

PublicDependencyModuleNames.AddRange(new string[] {"AIModule"}

UMG相关,需要添加UMG

PublicDependencyModuleNames.AddRange(new string[] {"UMG"}

至于PublicDependencyModuleNamesPrivateDependencyModuleNames的区别在于是.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即可。

总结

外部链接的问题根源在于没有 手动包含 或者 没有开放给外部使用
针对具体模块解决依赖问题即可

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值