2013-06-23 2 views
2

Я работаю над проектом Android, в котором есть несколько родных библиотек C++. Компиляция и отладка с использованием Eclipse с плагином ADT хорошо работает. Очевидно, что Android NDK использует arm-linux-gnueabi-gcc некоторой версии для компиляции собственных библиотек.Используйте ARMCC для компиляции родной библиотеки Android

Поскольку я использовал интенсивные свойства NEON, я хотел бы попытаться скомпилировать родные библиотеки с официальным компилятором ARM armcc. Я читаю везде, что armcc должен предоставлять улучшенный оптимизированный код при использовании встроенных функций. Поэтому я загрузил пробную версию DS-5 с веб-сайта ARM, чтобы проверить, действительно ли разница в скорости.

DS-5 кажется просто модифицированной версией Eclipse, которая использует инструментальную цепочку ARMCC, поэтому я установил плагин ADT. Но когда я компилирую с помощью DS-5, кажется, что код все еще сгенерирован с использованием gcc, а не armcc.

Вы не знаете, как заставить DS-5 или Eclipse построить собственный код Android с помощью armcc? Или возможно (и как) создавать статические библиотеки NDK из командной строки, а затем заменять библиотеки в моем проекте, чтобы они были развернуты на тестовом телефоне?

ответ

2

ARM DS-5 Community Edition не включает ARM compiler (armcc).

Если вы могли бы получить armcc, лучше всего было бы отделить ваши алгоритмы обработки тяжелыми алгоритмами до отдельных единиц компиляции (отдельные файлы C), построить их с помощью armcc, как и для любой единицы компиляции. Когда вы получите объектные файлы, convert them into an archive, используйте его в Android.mk как LOCAL_STATIC_LIBRARIES += <your_archive>.

Вы не можете использовать armcc для создания совместимых с Android библиотек в основном из-за зависимостей Bionic.

+0

Спасибо, я попробую это. У меня нет версии сообщества, но 30-дневная пробная версия полной версии DS-5. – NumberFour

+0

Если у меня есть только одна единица компиляции, которую нужно скомпилировать с помощью armcc, мне все равно нужно поместить этот единственный файл .o в архив? – NumberFour

+0

@NumberFour Я осмотрелся и увидел несколько сообщений, жалующихся на это, и консенсусом было создание архива. https: //android.googlesource.com/platform/ndk/+/master/docs/text/PREBUILTS.text http://stackoverflow.com/questions/7587965/android-add-prebuild-object-files – auselen

0

Вы можете использовать armcc для создания совместимых с Android статических библиотек, даже если у Android есть другая библиотека C (bionic). Ключ: --library_interface flag for armcc. По the documentation:

Используйте опцию вида --library_interface = aeabi_ * при связывании с ABI-совместимой библиотеки C. Варианты формы --library_interface = aeabi_ * гарантируют, что компилятор не генерирует вызовы для любых оптимизированных функций, предоставляемых библиотекой ARM C.

Кроме того, есть несколько флагов обеспечить совместимость с Android EABI в результате следующей команды для Android armeabi-v7a цели:
armcc --library_interface=aeabi_clib --wchar32 --enum_is_int --no_hide_all --cpu=7-A --fpu=softvfp+vfpv3 -c -o libfunc.o libfunc.c

Вы можете использовать armar --create libfunc.a libfunc.o создать статическую библиотеку которые могут быть связаны с Android NDK как LOCAL_STATIC_LIBRARIES.

Я успешно протестировал это с Android NDK r10d на Android KitKat 4.4.2.