2014-09-17 6 views
6

Ich baue ein Unity-Projekt für einen iOS8-Simulator. Das Verschieben für Xcode 6 GM für den Simulator hat zu diesem Linker-Fehler geführt. Ich bin mir nicht sicher, ob ich etwas im Gebäude verpasse oder etwas kaputt ist. Irgendwelche Vorschläge? Der vollständige Fehler ist:

undefinierte Symbole für Architektur i386: "_clock $ UNIX2003", verwiesen von: _substanceHandleSwitchHard in libiPhone-lib.a (apihandle.o) _mainRenderProcess in libiPhone-lib.a (mainrenderprocess.o) ld: Symbol (e) nicht für Architektur i386 am Ende main.mm

Ausgang mit Code 1

+0

möglich duplicate von [fopen $ UNIX2003 schlägt in externer Bibliothek fehl] (http://stackoverflow.com/questions/15856848/fopenunix2003-fails-inside-external-library) –

Antwort

3

Uhr $ UNIX2003 ist ein Symbol, das von OS X bereitgestellt wird und nicht zur Laufzeit des iOS-Simulators gehört. iOS ist immer konform und hat daher keine Legacy (nicht $ UNIX2003) Varianten von Funktionen (die für binäre Kompatibilität mit Code gegen ältere Versionen des OS X SDK zur Verfügung gestellt werden).

Die häufigste Ursache für das Problem, das Sie sehen, ist, dass Sie eine Objektdatei oder ein Archiv (libsomething.a) haben, das für das OS X SDK erstellt wurde und versucht, es mit Ihrer iOS Simulator-ausführbaren Datei zu verknüpfen. Dies wird nicht unterstützt, da die beiden Plattformen auf dieser Ebene nicht binärkompatibel sind.

Sie müssen Ihre Bibliothek (die libsomething.a) gegen das iOS Simulator SDK neu erstellen.

+0

Ich benötigte dies für das Testen gegen iOS8. Am Ende wurde es veröffentlicht und ich konnte auf einem tatsächlichen Gerät testen. Dieses Problem wurde auf den Simulator beschränkt. – Culzean

+0

@culzean Es ist kein Problem mit dem Simulator. Es handelt sich um ein Problem mit der Bibliothek, die Sie in Ihre Simulator-Programmdatei einbinden möchten. Die Laufzeiten von iOS Simulator und OS X sind nicht binärkompatibel und es sieht so aus, als ob Unity-Entwickler fälschlicherweise eine OSX-kompatible statische Bibliothek von Unity zur Verwendung im iOS-Simulator verschicken. In der Vergangenheit führte dies nur zu Laufzeitfehlern, aber jetzt führt es in mehr Fällen zu Kompilierzeitfehlern als früher. Hoffentlich ist das Update tatsächlich ein Build von Unity gegen das iOS Simulator SDK und nicht etwas mit zusätzlichen Hacks zum Maskieren der Bugs. –

+0

Bitte sagen Sie mir, wie libsomething.a –

8

Fügen Sie den folgenden gefunden.

#include <time.h> 

extern "C" 
{ 
clock_t 
clock$UNIX2003(void) 
{ 
    return clock(); 
} 
} 
+0

Definiere dies NICHT. Sie werden einfach einen tieferen Fehler maskieren, indem Sie Objektdateien verknüpfen, die nicht binärkompatibel zur iOS Simulator-Laufzeit sind. –

+0

Dies kann korrekt sein, @ JeremyHuddlestonSequoia, aber es ist die aktuelle Problemumgehung, die vom Unity-Team bereitgestellt wird (siehe http://forum.unity3d.com/threads/ios8-xcode6-compatibility.249533/page-2#post-1769753). – coeing

+0

Nun, dann müssen sich die Unity-Entwickler zusammenreißen und den Entwicklern die richtige Einheitlichkeit für den iOS-Simulator bieten, anstatt ihnen eine gegen das OS X-SDK gebaute Lösung zu geben. –