2012-07-03 7 views
5

In Xcode 4.3.2, creazione di un'app per iPad, che include libavutil.a dalla distribuzione ffmpeg, costruisce e gestisce in modo corretto, ma quando si tenta di eseguire test di unità (Cmd-U) ottengo il seguente errore di linker:Errore del linker durante il test dell'unità: ld: trasferimento del testo non valido in cstring in ... da _av_image_check_size in .../libavutil.a (imgutils.o)

ld: illegal text-relocation to cstring in /myPath/libavutil.a(imgutils.o) from _av_image_check_size in /myPath/libavutil.a(imgutils.o) for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Questo è sul dispositivo (non possiamo eseguirlo in il simulatore al momento perché non abbiamo binari grassi per tutte le librerie che stiamo includendo).

Perché verrà generato ed eseguito correttamente normalmente ma non collegato durante l'esecuzione dei test delle unità?

+0

Sembra che la risposta a questa è la stessa come la risposta a questa domanda: [link] http://stackoverflow.com/questions/6650178/illegal-text-reloc-to-non-lazy-ptr-error- while-building-in-xcode-4-with-libav-l – user1499742

risposta

8

La risposta, da here.

è quello di aggiungere:

-read_only_relocs suppress 

alle bandiere linker.

L'altro collegamento spiega perché. La soluzione è stata originariamente trovata here.

+0

ha funzionato per me. Grazie – bandejapaisa

+3

Questo non funziona più. Questo flag non è supportato su x86_64 ed è anche incompatibile con BYTECODE = YES. – dgatwood

2

Giusto per essere precisi, la linea che specificamente ha lavorato per correggere un errore di collegamento simile con ffmpeg per 32bit OSX collegamento mediante xcode/c++11, era di aggiungere -Wl,-read_only_relocs,suppress alla linea di collegamento. Variazioni di questo non ha funzionato.

+0

Con la bandiera, il lib possono essere compilati successo, ma sarà in crash il dispositivo a 32 bit quando si utilizza il lib: '' 'dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB ha segmento 0 che non è un segmento scrivibile (__TEXT) in/private/var/contenitori/Pacchetto/Applicazione/25DBDD6A-F5C1-4DD3-B432-F9FAB43A3673/UPLiveSDKDemo.app/Frameworks/SomeLibDll.framework/SomeLibDll '' – rotoava

3

Ho risolto questo errore del linker abilitando il codice indipendente dalla posizione nelle impostazioni del compilatore e del linker in XCode.