2014-09-17 6 views
6

Sto costruendo un progetto Unity per un simulatore iOS8. Lo spostamento di questo per Xcode 6 GM per il simulatore ha provocato questo errore del linker. Non sono sicuro se mi manca qualcosa nella build o qualcosa è rotto. Eventuali suggerimenti? L'errore completo è:

simboli non definiti per l'architettura i386: "_clock $ UNIX2003", fa riferimento a: _substanceHandleSwitchHard in libiphone-lib.a (apihandle.o) _mainRenderProcess in libiphone-lib.a (mainrenderprocess.o) ld: il simbolo (s) non trovato per l'architettura i386

uscita con il codice 1

+0

possibile duplicato di [fopen $ UNIX2003 non riesce nella libreria esterna] (http://stackoverflow.com/questions/15856848/fopenunix2003-fails-inside-external-library) –

risposta

3

orologio $ UNIX2003 è un simbolo che viene fornito da OS X e non fa parte del runtime simulatore iOS. iOS è sempre conforme a e quindi non ha varianti di funzioni legacy (non $ UNIX2003) (che sono fornite per la compatibilità binaria con il codice costruito rispetto alle versioni precedenti di OS X SDK).

La causa comune del problema che si sta verificando è che si dispone di un file oggetto o di un archivio (libsomething.a) creato con OS X SDK e che sta tentando di collegarlo al file eseguibile di iOS Simulator. Questo non è supportato in quanto le due piattaforme non sono compatibili binarie a quel livello.

È necessario ricreare la libreria (la libsomething.a) con l'SDK di iOS Simulator.

+0

ho richiesto questo test per iOS8. Alla fine è stato rilasciato e sono riuscito a testare su un dispositivo reale. Questo problema era limitato al simulatore. – Culzean

+0

@culzean Non è un problema con il simulatore. È un problema con la libreria che stai cercando di collegare al tuo eseguibile simulatore. I runtime di iOS Simulator e OS X non sono binari compatibili e sembra che gli sviluppatori di Unity stiano spedendo in modo errato una libreria statica di Unity compatibile con OSX per l'utilizzo in iOS Simulator. In passato, ciò comportava solo errori di runtime, ma ora si traduce in errori di compilazione in più casi rispetto al passato. Speriamo che l'aggiornamento sia in realtà una build di Unity contro l'SDK di iOS Simulator e non qualcosa con hack aggiuntivi per mascherare i bug. –

+0

per favore dimmi come ricostruire libsomething.a –

8

Aggiungere quanto segue alla fine del main.mm.

#include <time.h> 

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

Sicuramente non farlo. Semplicemente maschererai un bug più profondo in quanto stai collegando in file oggetto che non sono binari compatibili con il runtime di iOS Simulator. –

+0

Questo potrebbe essere corretto, @JeremyHuddlestonSequoia, ma è l'attuale soluzione alternativa fornita dal team Unity (vedere http://forum.unity3d.com/threads/ios8-xcode6-compatibility.249533/page-2#post-1769753). – coeing

+0

Bene, allora gli sviluppatori di Unity devono agire insieme e fornire agli sviluppatori una build di unità corretta per il simulatore iOS, invece di crearne una costruita rispetto all'SD X di OS X. –