- [question] arm-linux-androideabi-gcc: not found | Error 127, Error 2, #1321
- Comments
- LovableFatty commented Jul 21, 2020
- LovableFatty commented Jul 21, 2020
- stephenhines commented Jul 21, 2020
- stephenhines commented Jul 21, 2020
- LovableFatty commented Jul 21, 2020 •
- DanAlbert commented Jul 21, 2020
- LovableFatty commented Jul 21, 2020
- LovableFatty commented Jul 21, 2020 •
- DanAlbert commented Jul 21, 2020
- stephenhines commented Jul 21, 2020
- Создание пакетов APK x86 и ARM APK с помощью компилятора Intel® и GNU gcc
- Подготовка среды сборки
- Сборка из командной строки
- Сборка в интегрированной среде разработки Eclipse
- Примечание о невыполнении очистки двоичных файлов в .\libs\[targetabi]
- Прочие статьи по теме и ресурсы
- Кросскомпиляция под ARM
- Вводная
- Инструменты
- Элементарная технология кросскомпиляции
[question] arm-linux-androideabi-gcc: not found | Error 127, Error 2, #1321
Comments
LovableFatty commented Jul 21, 2020
Steps I followed:
make ARCH=arm goldfish_armv7_defconfig
make ARCH=arm menuconfig
check «enable loadable module support»
check «module unloading»
make ARCH=arm SUB_ARCH=arm CROSS_COMPILE=$/home/noah/Downloads/prebuilt-darwin/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi-
The text was updated successfully, but these errors were encountered:
LovableFatty commented Jul 21, 2020
It states arm-linux-androideabi-gcc: not found but going into the file shows arm-linux-androideabi-gcc
stephenhines commented Jul 21, 2020
It looks like you’re trying to build the Linux kernel with some NDK prebuilts that you have, but you really need to supply us with more information before we can help here. I’m also going to point out that you need to be building the Linux kernel with Clang instead of gcc, as we no longer provide support for gcc in the Android toolchain. @nickdesaulniers, can you post a sample command line for your suggested kernel build?
stephenhines commented Jul 21, 2020
Actually, I just spotted your bug. $/home/noah/Downloads/prebuilt-darwin/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi- in your command line should probably be $HOME/Downloads/. or just drop the $ from that part of your command line.
LovableFatty commented Jul 21, 2020 •
Actually, I just spotted your bug. $/home/noah/Downloads/prebuilt-darwin/darwin-x86/toolchain/arm-linux-androideabi-4.4.x/bin/arm-linux-androideabi- in your command line should probably be $HOME/Downloads/. or just drop the $ from that part of your command line.
Tried both solutions and didn’t work
DanAlbert commented Jul 21, 2020
The NDK doesn’t have GCC 4.4. The path you’re using isn’t pointing at a real directory.
LovableFatty commented Jul 21, 2020
The NDK doesn’t have GCC 4.4. The path you’re using isn’t pointing at a real directory.
Doesn’t this image showcase gcc 4.4.3? Also what do you mean by ‘The path you’re using isn’t pointing at a real directory.’ ?
LovableFatty commented Jul 21, 2020 •
building the Linux kernel with Clang
@stephenhines
After I build a linux kernel with clang how do I build an android LKM? that’s my end goal
DanAlbert commented Jul 21, 2020
That’s an extremely old NDK then.
stephenhines commented Jul 21, 2020
building the Linux kernel with Clang
@stephenhines
After I build a linux kernel with clang how do I build an android LKM? that’s my end goal
Источник
Создание пакетов APK x86 и ARM APK с помощью компилятора Intel® и GNU gcc
Существуют устройства Android на процессорах с архитектурами наборов инструкций (ISA) ARM или x86. Различные архитектуры наборов инструкций не имеют двоичной совместимости, поэтому приложение, содержащее нативный код, должно содержать нативные библиотеки для каждой архитектуры. Одним из механизмов распространения таких приложений являются так называемые «толстые» пакеты приложений Android («толстые» APK).
В этой статье содержатся пошаговые инструкции по созданию такого «толстого» пакета APK, включающего независимые от архитектуры файлы для виртуальной машины Dalvik (Dalvik, 2013), а также библиотеки для разных архитектур. В статье описывается сборка нативной библиотеки приложения x86 с помощью Intel Integrated Native Developer Experience (INDE).
Для демонстрации используем пример hello-jni из дистрибутива NDK r10 (входящий в состав установки Intel INDE).
Подготовка среды сборки
2) для program files (x86).
3. Создайте новую переменную среды:
JAVA_HOME=[jdk7-dir].
4. Установите:
пакет Intel Integrated Native Developer Experience должен быть установлен в [inde-dir].
5. Добавьте эту папку в переменную среды PATH:
каталог [ant-dir]\bin для использования средства ant (расположение [ant-dir] по умолчанию: [inde-dir]\IDEintegration)
Сборка из командной строки
В этом разделе содержатся инструкции по созданию пакетов APK для поддержки устройств Android с архитектурой ARM и x86 в среде сборки с командной строкой.
Откройте окно командной строки или окно терминала в Linux; перейдите в папку примеров Android NDK «hello-jni» [ndk-dir]\samples\hello-jni; выполните следующие действия.
Примечание. Все средства, перечисленные в разделе выше, должны быть доступны из этого окна.
1. Настройка приложения
Выполните следующую команду в папке hello-jni для создания файла build.xml, который будет впоследствии использован для сборки примера.
Примечание. —target android-19 соответствует версии Android 4.4 (KITKAT).
2. Очистка рабочей области приложения
Используйте следующую команду для очистки всей рабочей области, включая библиотеки, для всех архитектур ISA.
Примечание: V=1: печать всех команд по мере их выполнения. APP_ABI=all: принудительная очистка всех промежуточных файлов для всех целевых платформ. Если не указать этот параметр, будет очищен только файл для целевой платформы armeabi.
3. Сборка двоичных файлов для архитектуры ARM
Используйте указанную ниже команду для сборки двоичного файла приложения для архитектуры ARM:
Примечание: APP_ABI=armeabi-v7a: настройка компиляции для целевой платформы ARM. NDK_TOOLCHAIN=arm-linux-androideabi-4.8: вместо используемого по умолчанию GNU gcc 4.6, используется gcc 4.8.
Двоичный файл приложения (libhello-jni.so) создается по адресу .\libs\armeabi-v7a\libhello-jni.so.
4. Сборка двоичных файлов для архитектуры x86 с помощью компилятора Intel
Используйте указанную ниже команду для сборки двоичного файла приложения для архитектуры x86 с помощью компилятора Intel.
Примечание: APP_ABI=x86: настройка компиляции для архитектуры x86. NDK_TOOLCHAIN=x86-icc: замена используемого по умолчанию компилятора gcc 4.6 на компилятор Intel C/C++ для Android. NDK_APP.local.cleaned_binaries=true: отмена удаления библиотеки в каталоге libs/armeabi. См. примечания ниже.
Двоичный файл приложения (libhello-jni.so) создается по адресу .\libs\x86\libhello-jni.so.
5. Подготовка пакета приложения (APK)
После сборки всех двоичных файлов для каждой целевой платформы Android убедитесь, что папка libs\[targetabi] содержит требуемые библиотеки для каждой целевой архитектуры.
Чтобы упростить создание пакета и избежать его подписания, используйте следующую команду для создания отладочного пакета.
После этого новый пакет HelloJni-debug.zip появится в папке .\bin. Его можно запустить в имитаторах x86 или ARM, поддерживающих API уровня 19 или выше, содержащихся в Android SDK.
Пакет HelloJni-debug.zip содержит библиотеки для двух целевых платформ: ARM EABI v7a и x86.
Сборка в интегрированной среде разработки Eclipse
1. Откройте Eclipse и загрузите пример [inde-dir]/IDEintegration/NDK/samples/hello-jni.
В меню выберите File > New > Project > Android.
Нажмите кнопку Android Project from Existing Code.
В поле Root Directory нажмите кнопку Browse. и выберите папку [ndk-dir]/samples.
Затем щелкните Deselect All и выберите только нужный проект: hello-jni
Снимите флажок Copy projects into workspace.
Нажмите кнопку Finish.
2. Добавьте в проект поддержку нативного кода.
Щелкните имя проекта правой кнопкой мыши и выберите Android Tools > Add Native Support.
Нажмите кнопку Finish.
Примечание. Если после этого шага на консоли появляется сообщение об ошибке Unable to launch cygpath, этот шаг можно пропустить, что не повлияет на проект.
3. Создайте отдельную конфигурацию сборки для каждой целевой платформы, задайте команду сборки.
Щелкните проект правой кнопкой мыши и выберите Project properties -> C/C++ Build -> Manage configurations.
Щелкните New. , чтобы добавить новые конфигурации на основе конфигурации по умолчанию.
Имя: x86_icc Описание: для целевой платформы x86 с помощью компилятора Intel icc
Имя: arm_gcc Описание: для целевой платформы ARM с помощью компилятора GNU gcc
В этом же окне свойств проекта установите для параметра Configuration значение x86_icc.
Снимите флажок Use default build command.
Добавьте следующий текст в поле Build command: ndk-build APP_ABI=x86 NDK_TOOLCHAIN=x86-icc.
Щелкните Apply.
В этом же окне свойств проекта установите для параметра Configuration значение arm_gcc.
Снимите флажок Use default build command.
Добавьте следующий текст в поле Build command: ndk-build APP_ABI=armeabi-v7a NDK_TOOLCHAIN=arm-linux-androideabi-4.8.
Нажмите кнопку Apply, затем нажмите кнопку ОК.
4. Очистка всей рабочей области приложения
Если файл Application.mk существует в папке [eclipse-workspace-dir]\HelloJni\jni, убедитесь, что он не содержит следующую строку.
NDK_APP.local.cleaned_binaries=true
Щелкните проект правой кнопкой мыши и выберите Build configurations > Clean all….
5. Создайте файл Application.mk в папке [eclipse-workspace-dir]\HelloJni\jni, если он не существует, и убедитесь, что он содержит следующую строку.
NDK_APP.local.cleaned_binaries=true
6. Соберите двоичный файл для целевой архитектуры ARM* с помощью gcc и для целевой архитектуры x86 с помощью компилятора Intel.
Щелкните проект правой кнопкой мыши и выберите Build Configurations > Build Selected.
Выберите arm_gcc и x86_icc.
Нажмите кнопку ОК.
Проверьте выходные двоичные файлы по следующим адресам.
[eclipse-workspace-dir]\HelloJni\libs\armeabi-v7a\libhello-jni.so
[eclipse-workspace-dir]\HelloJni\libs\x86\libhello-jni.so
7. Создание неподписанных пакетов приложений
Щелкните проект правой кнопкой мыши и выберите Android Tools > Export Unsigned Application Package.
Примечание о невыполнении очистки двоичных файлов в .\libs\[targetabi]
Параметр NDK_APP.local.cleaned_binaries=true для отключения удаления собранных ранее библиотек может не работать в будущих версиях NDK. См. [ndk-dir]/build/core/setup-app.mk для получения информации о том, как отключить действия удаления для установленных двоичных файлов.
Прочие статьи по теме и ресурсы
Дополнительные сведения о средствах Intel для разработчиков Android см. на сайте Intel Developer Zone for Android.
Источник
Кросскомпиляция под ARM
Достаточно давно хотел освоить сабж, но всё были другие более приоритетные дела. И вот настала очередь кросскомпиляции.
В данном посте будут описаны:
- Инструменты
- Элементарная технология кросскомпиляции
- И, собственно, HOW2
Кому это интересно, прошу под кат.
Вводная
Одно из развивающихся направлений в современном IT это IoT. Развивается это направление достаточно быстро, всё время выходят всякие крутые штуки (типа кроссовок со встроенным трекером или кроссовки, которые могут указывать направление, куда идти (специально для слепых людей)). Основная масса этих устройств представляют собой что-то типа «блютуз лампочки», но оставшаяся часть являет собой сложные процессорные системы, которые собирают данные и управляют этим огромным разнообразием всяких умных штучек. Эти сложные системы, как правило, представляют собой одноплатные компьютеры, такие как Raspberry Pi, Odroid, Orange Pi и т.п. На них запускается Linux и пишется прикладной софт. В основном, используют скриптовые языки и Java. Но бывают приложения, когда необходима высокая производительность, и здесь, естественно, требуются C и C++. К примеру, может потребоваться добавить что-то специфичное в ядро или, как можно быстрее, высчитать БПФ. Вот тут-то и нужна кросскомпиляция.
Если проект не очень большой, то его можно собирать и отлаживать прямо на целевой платформе. А если проект достаточно велик, то компиляция на целевой платформе будет затруднительна из-за временных издержек. К примеру, попробуйте собрать Boost на Raspberry Pi. Думаю, ожидание сборки будет продолжительным, а если ещё и ошибки какие всплывут, то это может занять ох как много времени.
Поэтому лучше собирать на хосте. В моём случае, это i5 с 4ГБ ОЗУ, Fedora 24.
Инструменты
Для кросскомпиляции под ARM требуются toolchain и эмулятор платформы либо реальная целевая платформа.
Т.к. меня интересует компиляция для ARM, то использоваться будет и соответствующий toolchain.
Toolchain’ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, vendor и OS, vendor зачастую опускается.
- *-none-eabi — это toolchain для компиляции проекта работающего в bare metal.
- *eabi — это toolchain для компиляции проекта работающего в какой-либо ОС. В моём случае, это Linux.
- *eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float.
Описанное выше справедливо для gcc и сделанных на его базе toolchain’ах.
Сперва я пытался использовать toolchain’ы, которые лежат в репах Fedora 24. Но был неприятно удивлён этим:
Поискав, наткнулся на toolchain от компании Linaro. И он меня вполне устроил.
Второй инструмент- это QEMU. Я буду использовать его, т.к. мой Odroid-C1+ пал смертью храбрых (нагнулся контроллер SD карты). Но я таки успел с ним чуток поработать, что не может не радовать.
Элементарная технология кросскомпиляции
Собственно, ничего необычного в этом нет. Просто используется toolchain в роли компилятора. А стандартные библиотеки поставляются вместе с toolchain’ом.
Выглядит это так:
Какие ключи у toolchain’а можно посмотреть на сайте gnu, в соответствующем разделе.
Для начала нужно запустить эмуляцию с интересующей платформой. Я решил съэмулировать Cortex-A9.
После нескольких неудачных попыток наткнулся на этот how2, который оказался вполне вменяемым, на мой взгляд.
Ну сперва, само собою, нужно заиметь QEMU. Установил я его из стандартных репов Fedor’ы.
Далее создаём образ жёсткого диска, на который будет установлен Debian.
По этой ссылке скачал vmlinuz и initrd и запустил их в эмуляции.
Далее просто устанавливаем Debian на наш образ жёсткого диска (у меня ушло
После установки нужно вынуть из образа жёсткого диска vmlinuz и initrd. Делал я это по описанию отсюда.
Сперва узнаём смещение, где расположен раздел с нужными нам файлами:
Теперь по этому смещению примонтируем нужный нам раздел.
Копируем файлы vmlinuz и initrd и размонтируем жёсткий диск.
Теперь можно запустить эмуляцию.
И вот заветное приглашение:
Теперь с хоста по SSH можно подцепиться к симуляции.
Теперь можно и собрать программку. По Makefile’у ясно, что будет калькулятор. Простенький.
Собираем на хосте исполняемый файл.
Отмечу, что проще собрать с ключом -static, если нет особого желания предаваться плотским утехам с библиотеками на целевой платформе.
Копируем исполняемый файл на таргет и проверяем.
Собственно, вот такая она, эта кросскомпиляция.
UPD: Подправил информацию по toolchain’ам по комментарию grossws.
Источник