2012-07-03 6 views
5

En Xcode 4.3.2, compilando una aplicación para iPad, que incluye libavutil.a de la distribución ffmpeg, se construye y funciona correctamente, pero cuando trato de ejecutar pruebas unitarias (Cmd + T) me sale el siguiente error de vinculador:Error de vinculador al probar la unidad: ld: reubicación de texto ilegal a cstring en ... desde _av_image_check_size en .../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)

Esto es en el dispositivo (no podemos ejecutarlo en el simulador actualmente porque no tenemos binarios gordos para todas las bibliotecas que incluimos).

¿Por qué se compilará y se ejecutará correctamente normalmente pero no se vinculará cuando se realicen pruebas unitarias?

+0

Parece que la respuesta a esto es la misma que la respuesta a esta pregunta: [link] http://stackoverflow.com/questions/6650178/illegal-text-reloc-to-non-lazy-ptr-error- while-building-in-xcode-4-with-libav-l – user1499742

Respuesta

8

La respuesta, de here.

es añadir:

-read_only_relocs suppress 

a las banderas de engarce.

El otro enlace explica por qué. La solución se encontró originalmente en here.

+0

Funcionó para mí. Gracias – bandejapaisa

+3

Esto ya no funciona. Ese indicador no está soportado en x86_64 y también es incompatible con BYTECODE = YES. – dgatwood

2

sólo para ser específico, la línea que trabajó específicamente para corregir un error de vinculación similar con ffmpeg para 32bit OSX enlace utilizando xcode/c++11, fue añadir -Wl,-read_only_relocs,suppress a la línea de enlace. Las variaciones de esto no funcionaron.

+0

Con el indicador, la lib se puede compilar con éxito, pero se bloqueará en el dispositivo de 32 bits cuando se usa lib: '' 'dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB tiene el segmento 0 que no es un segmento modificable (__TEXT) en/private/var/containers/Bundle/Application/25DBDD6A-F5C1-4DD3-B432-F9FAB43A3673/UPLiveSDKDemo.app/Frameworks/SomeLibDll.framework/SomeLibDll '' – rotoava

3

Resolví este error de enlazador al habilitar el código de posición independiente en la configuración del compilador y el enlazador en XCode.

Cuestiones relacionadas