2014-09-22 9 views
7

Ho scaricato il nuovo iOS 8 sia nel mio telefono che nell'ultimo Xcode sul mio Mac. Funziona tutto bene, ma dopo aver caricato su e provare il nuovo iPhone 6 Plus simulatore quando provo l'iPhone 4S o 5 simulatori (funziona con 5s) ottengo il seguente errore:

Undefined symbols for architecture i386: 
    "_fwrite$UNIX2003", referenced from: 
     leveldb::(anonymous namespace)::PosixEnv::~PosixEnv() in Firebase(env_posix.o) 
     leveldb::(anonymous namespace)::PosixEnv::~PosixEnv() in Firebase(env_posix.o) 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Mi sembra molto strano per me che ho utilizzato il simulatore di iPhone 4 per tutta la mattinata, ma è solo dopo che ho provato il simulatore iPhone 6 plus che si rompe e non riesco a riprenderne l'uso

+0

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

+0

Sebbene sia stata inviata una risposta duplicata, la domanda non è certamente È un duplicato - uno che si riferisce a questo errore per quanto riguarda iOS 8 e il simulatore, l'altro che si riferisce all'uso di una libreria statica esterna –

+0

La domanda è chiaramente un duplicato. Entrambi riguardano il collegamento degli errori che collegano un'app per simulatore a iOS 8 Simulator SDK utilizzando un archivio statico compilato con OS X SDK. –

risposta

12

La risposta fornita in this link ha funzionato bene per me.

Come da link qui sopra, Al fine di rimuovere tutti questi errori è necessario creare un file * .c (non ha bisogno di un nome specifico) e copiare incollare il codice sotto:

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <stdlib.h> 

FILE *fopen$UNIX2003(const char *filename, const char *mode) 
{ 
    return fopen(filename, mode); 
} 

int fputs$UNIX2003(const char *res1, FILE *res2){ 
    return fputs(res1,res2); 
} 

int nanosleep$UNIX2003(int val){ 
    return usleep(val); 
} 

char* strerror$UNIX2003(int errornum){ 
    return strerror(errornum); 
} 

double strtod$UNIX2003(const char *nptr, char **endptr){ 
    return strtod(nptr, endptr); 
} 

size_t fwrite$UNIX2003(const void *a, size_t b, size_t c, FILE *d) 
{ 
    return fwrite(a, b, c, d); 
} 

normalmente tutto dovrebbe essere ok.

5

fwrite $ UNIX2003 è un simbolo fornito dal sistema operativo X e non fa parte del runtime di iOS Simulator. 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 (env_posix.o o un libsomething.a che contiene env_posix.o) creato con OS X SDK e che sta tentando di collegarsi nel tuo eseguibile simulatore iOS. Questo non è supportato in quanto le due piattaforme non sono compatibili binarie a quel livello.

È necessario ricostruire env_posix.o con l'SDK di iOS Simulator.

+0

per favore dimmi come ricostruire libsomething.a –

+0

@hardikvyas Hai solo bisogno di ricostruire il tuo codice con l'SDK appropriato. Non posso darti istruzioni più specifiche di quelle perché dipenderebbe dal tuo caso particolare. –

+0

Grazie, lo proverò –