天天看點

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

總結

外部連結的問題根源在于沒有

手動包含

或者

沒有開放給外部使用

針對具體子產品解決依賴問題即可

繼續閱讀