【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即可。
總結
外部連結的問題根源在于沒有
手動包含
或者
沒有開放給外部使用
針對具體子產品解決依賴問題即可