2013-09-26 3 views
2

Я получаю ошибку при компиляции x264 для iOS.Компиляция x264 для iOS 7

У меня версия Xcode 5.0 (5A1413) с Apple LLVM версии 5.0 (clang-500.2.75) (на основе LLVM 3.3svn). Я компилирую x264-snapshot-20130925-2245.

Config:

CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ./configure \ 
--host=arm-apple-darwin \ 
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk \ 
--prefix=armv7 \ 
--extra-cflags='-arch armv7' \ 
--extra-ldflags="-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system -arch armv7" \ 
--enable-pic \ 
--enable-static 

Получение ошибки:

common/arm/cpu-a.S:29:7: error: unknown token in expression 
.align 
    ^
common/arm/cpu-a.S:139:5: error: instruction 'suble' can not set flags, but 's' suffix specified 
    subles ip, ip, #1 
    ^

ответ

0

До сих пор единственным решением, кажется --disable-asm.

5

Соответствующее изменение в инструментальной цепочке Xcode 5 заключается в том, что компилятор LLVM по умолчанию использует встроенный ассемблер, а встроенный ассемблер требует более строгого соблюдения языка унифицированной сборки ARM.

Есть два способа получить его скомпилировать с Xcode 5: набора инструментов

  1. Дают лязг флаг -по-интегрально-а. Добавление его в -extra-cflags должно работать. (Флаг работал для меня, компилируя отдельные файлы, но я никогда не работал с ним в configure.) Рассмотрим это обходным путем.

  2. Исправить исходный код сборки в подкаталоге x264 common/arm. На самом деле это довольно легко, и это то, что я сделал. Это правильное решение. BTW, я вот-вот отправлю патч к x264 с этими изменениями.

Ассемблер излучает много ошибок, и они делятся на четыре категории:

  • В CPU-A.ş, то ".align" директива должна быть».align 2" . (По-видимому, он использовал значение по умолчанию для 2, теперь 2 должно быть явным.)

  • Несколько надписей и подземелий в нескольких файлах. Это варианты «sub» (вычитание), за которыми следуют условие (2 символа) и суффикс «s». Теперь «s» должно предшествовать условию. Таким образом, «подвыборы» => «subsle» и «sublts» => «subslt».

  • Справедливое количество инструкций ldrd в различных файлах. Эта инструкция означает «регистр нагрузки, двойной (из памяти)». Он загружает 2 32-битных слова из памяти в регистры. Раньше было нормально указывать только первый регистр; теперь оба нужно назвать. Они всегда рядом. Итак, «ldrd r2, независимо от того, что нужно», должно стать «ldrd r2, r3, whatever». «ldrd r6, что-то» становится «ldrd r6, r7, что-то». И т.д.

  • В пикселе-a.S есть инструкция «vmov.32 r0, r1, d0». Это неверно. vmov.32 означает переместить 32-битное количество, но аргументы говорят, что для перемещения d0 (64 бит) в r0 и r1. По-видимому, старый компилятор принял «.32» часть как подсказку. Я считаю, что это должно быть «vmov r0, r1, d0», и это изменение работает для меня, но у меня нет абсолютного доказательства, которое является правильной инструкцией.

Большое спасибо gparker на форуме разработчиков Apple! Я не мог понять это без его/ее помощи. Link to forum discussion, Apple ID required.

0

Я думаю, что отключение ассемблерных оптимизаций является плохим решением.

После долгих исследований я нашел корень проблемы: звон во время компиляции ассемблера использует ASFLAGS не CFLAGS, так что добавление --extra-asflags = «- арка ARMv7» решает проблему

./configure \ 
--host=arm-apple-darwin \ 
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk \ 
--prefix=armv7 \ 
--extra-cflags="-arch armv7" \ 
--extra-asflags="-arch armv7" \ 
--extra-ldflags="-arch armv7" \ 
--enable-pic \ 
--enable-static 

ПРИМЕЧАНИЕ. Для поддержки биткода просто добавьте -fembed-bitcode ко всем дополнительным параметрам флажка

Смежные вопросы