2016-02-18 6 views
8

У нас большой проект с несколькими приложениями, поэтому мы переместили общий код в единую динамическую структуру. До сих пор работает нормально на 64-разрядных устройств, но имеющих аварии на 32-разрядных устройств следующим образом:Xcode 7.2 Динамическая структура Ошибка 32-битного устройства

dyld: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB has segment 0 which is not a writable segment (__TEXT) in 
/path/to/MyApp.app/Frameworks/MyFramework.framework/MyFramework 

Немного предыстории: Мы FFmpeg и несколько других жиров ЛИЭС скомпилированы ARM64, ARMv7 и x86_64 архитектур затем добавляется в фреймворк. У нас были некоторые ошибки перестановки текста, которые были устранены путем добавления -read_only_relocs suppress к флагом компоновщика.

Если мы выберем ffmpeg и связанные с ним библиотеки, он отлично работает на 32-разрядных устройствах.

Кто-нибудь наткнулся на такую ​​ошибку? Любой указатель или помощь будут высоко оценены.

ответ

0

У нас была такая же проблема при использовании «Динамической библиотеки» для типа Mach-O внутри вашей рамки. Исправлена ​​проблема с переходом на «Relocatable Object File». Проблема, похоже, связана с перемещением текста внутри библиотек.

Как описано более подробно here:. «Текст перемещение является результатом ссылки на объект с переменным адресом во время выполнения с использованием абсолютного режима адресации Инструкции кодирующих себя содержит адрес и, следовательно, исполняемый текст двоичный файл должен быть изменен, чтобы содержать правильный адрес при учете фактических адресов загрузки во время выполнения ».

использовать FFMPEG текст переездов, и это было большой проблемой на Android M (https://trac.ffmpeg.org/ticket/4928)

Поскольку они не собираются быть исправлены в ближайшее время, «перемещаемый объектный файл», кажется, единственный вариант.