2016-12-05 13 views
1

我一直在嘗試使用Xcode中建立UETorch爲OSX 10.12,並遇到了以下錯誤時:連接錯誤在Xcode 8.1試圖建立UETorch

Undefined symbols for architecture x86_64: 
    "FlushRenderingCommands()", referenced from: 
     _CaptureScreenshot in Module.UETorch.cpp.o 
     InitCapture(UObject*, IntSize const*, FViewport**, APlayerController**, UWorld**, FSceneView**) in Module.UETorch.cpp.o 
    "FSlateApplication::CurrentApplication", referenced from: 
     _CaptureScreenshot in Module.UETorch.cpp.o 
     FSlateApplication::Get() in Module.UETorch.cpp.o 
    "FSlateApplication::TakeScreenshot(TSharedRef<SWidget, (ESPMode)0> const&, FIntRect const&, TArray<FColor, FDefaultAllocator>&, FIntVector&)", referenced from: 
     _CaptureScreenshot in Module.UETorch.cpp.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

這似乎是ld: symbol(s) not found...部分通常是由固定使用libstdC++而不是libC++,並且我已經嘗試將-stdlib=libstdc++添加到「其他鏈接器標記」,並且在「構建階段」部分鏈接了libstdC++。6.0.9.dylib,但我仍然收到相同的錯誤。

回答

1

我沒有評論的聲望,因此在這裏添加它,當您嘗試使用符號/調用函數並且鏈接程序找不到它的定義時,您會得到未定義的符號。所以如果定義來自某個庫,那麼在鏈接階段添加它。 您可以使用nm命令檢查庫中是否存在定義,例如, 「nm -D」

+0

該定義在項目的另一部分(UE4源代碼而不是UETorch插件)中。我試圖把它包括在這個文件的頂部,但似乎沒有工作......你在哪裏建議我嘗試運行「nm -D」?謝謝您的幫助! – Bridgo

+1

該文件的頂部將有助於編譯期間,但你得到一個鏈接器錯誤,所以問題是在鏈接階段。如果您有源代碼,您需要提供一個庫或使用一個目標文件。 首先您需要找到具有該定義的庫,您可以通過使用「nm -D xxx.so | grep FlushRenderingCommands」來確認庫的定義。 –

+0

好吧,這是有道理的。我可以在項目其他地方的.cpp文件中找到FlushRenderingCommands的定義,但我不知道生成的目標文件在哪裏以及它們爲什麼不能正確鏈接......看起來像來自項目其他部分的函數連接好,這是奇怪的。 – Bridgo