2016-12-05 2 views
1

J'ai essayé de construire UETorch pour OSX 10,12 en utilisant Xcode et ont rencontré l'erreur suivante:Linker Erreur dans Xcode 8.1 en essayant de construire 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) 

Il semble que la partie ld: symbol(s) not found... est souvent fixée par en utilisant libstdC++ au lieu de libC++ et j'ai essayé d'ajouter -stdlib=libstdc++ à "Autres indicateurs de liens" ainsi que de lier libstdC++. 6.0.9.dylib dans la section Construire des Phases mais je reçois toujours la même erreur.

Répondre

1

Je n'ai pas la réputation de commenter donc en l'ajoutant ici, vous obtenez des symboles indéfinis lorsque vous essayez d'utiliser le symbole/Appelez la fonction et l'éditeur de liens ne trouve pas sa définition. Donc, si la définition provient d'une bibliothèque, ajoutez-la lors de votre étape de liaison. Vous pouvez vérifier si la définition est présente ou non dans la bibliothèque en utilisant la commande nm, par ex. "nm -D"

+0

La définition est dans une autre partie du projet (le code source UE4 plutôt que le plugin UETorch). J'ai essayé de l'inclure en haut de ce fichier mais ça ne semblait pas fonctionner ... Où me suggérez-vous d'essayer "nm -D"? Merci pour l'aide! – Bridgo

+1

Le début du fichier aiderait lors de la compilation, mais vous obtenez une erreur de l'éditeur de liens, donc le problème est lors de la phase de liaison. Vous devez fournir une bibliothèque ou utiliser un fichier objet, si vous avez la source. Vous devez d'abord trouver la bibliothèque qui a la définition, vous pouvez confirmer que la bibliothèque a la définition en utilisant "nm -D xxx.so | grep FlushRenderingCommands" pour vérifier. –

+0

Ah ok ça a du sens. Je peux trouver la définition de FlushRenderingCommands dans un fichier .cpp ailleurs dans le projet mais je ne sais pas où vont les fichiers objets générés et pourquoi ils ne seraient pas correctement liés ... Cela ressemble à des fonctions d'autres parties du projet relient ok qui est impair. – Bridgo