2017-06-26 2 views
0

Ich baue ein Projekt (das Ziel ist ein Rahmen, wenn es wichtig ist) für tvOS und bekommt die Fehler aus dem Linker:ld: für tvOS Aufbau, aber die Verknüpfung in Objektdatei für iOS gebaut, für Architektur arm64

ld: für tvOS Aufbau, aber die Verknüpfung in Objektdatei für iOS gebaut, für Architektur arm64

ich otool -l *.o in OBJECTS_FILE_DIR_normal lief und dachte, einer von .o Dateien aus eigentlich für iOS statt tvOS gebaut wird.

Das Problem ist, dass es keine entsprechende Quelldatei (* .mm oder * .cpp) für diese .o gibt. Es heißt <ProjectName>_lto.o und ich sehe keine Compiler-Aufrufe für diese Datei im Build-Protokoll. Es erscheint nur einmal in Linker-Befehlszeile:

-Xlinker -object_path_lto -Xlinker /Full/path/to/<ProjectName>.build/Debug-appletvos/tvOS.build/Objects-normal/arm64/<ProjectName>_lto.o 

LLVM_LTO Buildeinstellungen nicht explizit festgelegt werden, aber es standardmäßig NO. Die Einstellung auf NO hilft ausdrücklich nicht.

Ich verwende Xcode 8.3.2 (8E2002).

Also meine Frage ist: Warum ist diese Objektdatei überhaupt erstellt und warum ist es für falsche Zielplattform erstellt?

Antwort

0

Nicht sicher, ob dies die Antwort auf meine eigene Frage oder die Bearbeitung sein sollte, da es nicht die ursprüngliche Frage beantwortet, warum diese _lto.o Datei überhaupt für falschen Arch mit LLVM_LTO=NO generiert wird, aber es kann anderen helfen, dieses Problem zu beheben.

Also habe ich mich entschieden, zu versuchen, LTO in dem Projekt zu ermöglichen. LLVM_LTO=YES_THIN verhielt sich identisch zu LLVM_LTO=NO. LLVM_LTO=YES gemacht Linker produzieren Tonnen Warnungen wie folgt aus:

ld: warning: Linking two modules of different target triples: /path/to/one/of/3rdpary/libs/libproblematic.a(file1.o)' is 'arm64-apple-ios7.0.0' whereas 'ld-temp.o' is 'arm64-apple-tvos9.0.0' 
ld: warning: Linking two modules of different target triples: /path/to/one/of/3rdpary/libs/libproblematic.a(file2.o)' is 'arm64-apple-ios7.0.0' whereas 'ld-temp.o' is 'arm64-apple-tvos9.0.0' 

Aber mit all diesen Warnungen für einige seltsame Grund die Verbindung erfolgreich war. Die interessante Sache ist, dass, wenn ich otool -l libproblematic.a laufen lasse, sehe ich nur cmd LC_VERSION_MIN_TVOS Linien und keine cmd LC_VERSION_MIN_IPHONEOS und Linker beschwerte sich nicht auf irgendwelchen der Objekte von dieser Bibliothek, die sie für falsche Zielplattform errichtet wurden. Auch file1, file2 usw. erscheinen nicht in der Ausgabe von otool -l libproblematic.a.

Verwandte Themen