Недопустимый перенос текста в non_lazy_ptr при сборке в xcode 4 с библиотеками libav * - PullRequest
3 голосов
/ 11 июля 2011

Я пытаюсь создать простое приложение, использующее библиотеки libf * от ffmpeg в xcode 4, и получаю следующую ошибку:

ld: недопустимый перенос текста в non_lazy_ptr из /ffmpeg/temp/ffmpeg-0.8/builduni/lib/libavcodec.a(ac3.o) в _ff_ac3_bit_alloc_calc_psd для архитектуры i386

Я уже пытался запустить ranlib -c libavcodec.a, чтобы исправить эту проблему, но ничего не произошло. Еще одна вещь: мои библиотеки libav * являются толстыми двоичными файлами (i386 + x86_64).

Есть идеи, что это может быть?

1 Ответ

4 голосов
/ 17 февраля 2012

У меня такая же ошибка.Наконец, я получил решение на http://lists.apple.com/archives/unix-porting/2008/Jan/msg00027.html

, просто добавив другой флаг ссылки:

-read_only_relocs suppress

* ОБЪЯСНЕНИЕ * Две команды сборки загружают абсолютыадрес _trail в R15.Это нормально, если _trail в конечном итоге находится в одном и том же блоке связи._trail находится в libmodule.dylib.Чтобы это работало, во время выполнения динамический загрузчик (dyld) должен был бы переписать две инструкции.Обычно dyld обновляет только указатели данных.Обходной путь - сделать libdyalog архивом (например, libdyalog.a) и связать его с pere.s.Тогда весь код будет находиться в одном и том же модуле связи, поэтому не будет необходимости перемещать текст во время выполнения.Среда выполнения (dyld) поддерживает перемещение текста (инструкции по обновлению) для i386, но вам нужно связать с подавлением -read_only_relocs.

...