【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即可。

总结

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


版权声明:本文为qq_21952321原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。