gcc-arm-linux-gnueabi command not found
I am trying to install the gnu arm toolchain for ubuntu. I first downloaded the tar from CodeSourcery. However when I go into the bin folder, I cannot run any of the binaries. I have tried with ./ and without and putting it in the PATH and it keeps telling me «Command not Found» yet the file is there in the folder right in front of me. Then I tried sudo apt-get install gcc-arm-linux-gnueabi except after it says it has installed successfully, I cannot find it with whereis gcc-arm-linux-gnueabi. Can anyone help?
11 Answers 11
Are you compiling on a 64-bit OS? Try:
I had the same problem when trying to compile the Raspberry Pi kernel. I was cross-compiling on Ubuntu 12.04 64-bit and the toolchain requires ia32-libs to work on on a 64-bit system.
CodeSourcery convention is to use prefix arm-none-linux-gnueabi- for all executables, not gcc-arm-linux-gnueabi that you mention. So, standard name for CodeSourcery gcc would be arm-none-linux-gnueabi-gcc .
After you have installed CodeSourcery G++, you need to add CodeSourcery directory into your PATH .
Typically, I prefer to install CodeSourcery into directory like /opt/arm-2010q1 or something like that. If you don’t know where you have installed it, you can find it using locate arm-none-linux-gnueabi-gcc , however you may need to force to update your locate db using sudo updatedb before locate will work properly.
After you have identified where your CodeSourcery is installed, add it your PATH by editing
Also, it is customary and very convenient to define
in your .bashrc , because with CROSS_COMPILE defined, most tools will automatically use proper compiler for ARM compilation without you doing anything.
What is the difference between arm-linux-gcc and arm-none-linux-gnueabi
What is the difference between arm-linux-gcc and arm-none-linux-gnueabi and arm-linux-gnueabi toolchains?
Do they compile differently?
1 Answer 1
Toolchains have a loose name convention like arch[-vendor][-os]-abi .
- arch is for architecture: arm, mips, x86, i686.
- vendor is tool chain supplier: apple,
- os is for operating system: linux, none (bare metal)
- abi is for application binary interface convention: eabi, gnueabi, gnueabihf
For your question, arm-none-linux-gnueabi and arm-linux-gnueabi is same thing. arm-linux-gcc is actually binary for gcc which produces objects for ARM architecture to be run on Linux with default configuration (abi) provided by toolchain.
Кросскомпиляция под 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.
где есть arm-none-linux-gnueabi
Сабж. Рыскаю в инете и не могу найти. Где достать этот набор тулчейнов, никто не знает?
Я хотел оф. сайт, мне нужна версия компилятора для арма gcc, g++ 4.3
Я хотел оф. сайт, мне нужна версия компилятора для арма arm-none-linux-gnueabi-gcc, ..-g++ версии 4.3 и старше.
я еще не компилировал компиляторы.
Собери сам, друже! Собрать тулчейн можно с помощью crosstool-NG.
Это так же просто, как компилировать ядро.
Но если не хочешь связываться с компиляцией и используешь Debian-based дистрибутив, можешь попробовать выполнить sudo apt-get install gcc-arm-linux-gnueabi . Там будут все необходимые тебе пакеты, уже скомпилированные.
Если используешь Source-based дистр, например Gentoo, можешь воспользоваться Crossdev:
мне нужна версия компилтяора с поддержкой с++11. Ну вроде кросс тулл подходит
Отлично, только при конфигурировании тулчейна не забудь выбрать GCC версией попозднее, 4.7.X или 4.8.X (практически все фичи стандарта).
Если что, спрашивай тут. Недавно собирал тулчейн с его помощью, правда вместе с древним компилятором.
Спасибо, обязательно. Но пока прочту доки 🙂
Насколько мне известно, сейчас 2 организации на постоянной основе собирают такие тулчейны и выкладывают: Linaro и Mentor Graphics (Code Sourcery). На их оф. сайтах все можно скачать бесплатно и без смс, начиная с самых бородатых версий. Собирать самому не советую.
Кстати, как показала практика, 4.4 меньше всего фокусов выделывает. Рекомендую.
Мои туллчейны кстати тоже от Mentor’a, но чет я там их не вижу, где они?
Тык. Нажимаешь Download и регаешься.
Именно то, что нужно спасибо огромное.
Все совсем наоборот. Хочешь нерешаемые проблемы — связывайся с linaro и codesourcery. Хочешь, чтоб работало и не мешало жить, собирай с crosstools-ng.
Привет. Часом не скажешь как правильно настроить uClibc для сборки приложений. Не получается кросскомпиляция проектов под ARM с использованием uClibc. Засада?!
С помощью crosstool-ng можно собрать arm-linux-uclibc-*, правда не проверял его в деле.
Такой еще вопрос. Я взял последнюю версию сей библиотеки.. Сконфигурировал ее, но сборка не получается, ругается. Добавив часть исходного кода. стала собираться, но собралось только часть исходного кода. libm.a libcrypt.a и еще пара библиотек. Вся либа не собралась. Ошибку дает. Не совсем видит исходники uClinux. Как быть.
Второй вопрос — роль этой библиотеки в uClinux. Насколько она нужна, для разработки прикладного, системного ПО. Последний вопрос такой — как получить elf bflt выходной файл.
Буду рад получить хоть какую-нибудь инфу. на вопросы. Информации мало в сети. почти ничего не нашел. Если есть ссылки на толковые ресурсы в сети, буду рад.
P.S. приложение написал практически в линухе, десктопе.. ни арм. это возможно ввиду того что апи платформонезавимо многое, а до конца написать не могу.. и тем более запустить, проблема. Нужно на uClinux. Плата готова с ним. Последние штрихи нужно сделать. А это не знаю..
Всю систему(u-boot и uClinux) собирал следующим тулом arm-none-eabi-gcc. Плата готова к бою. Софтину не получается собрать.
Привет. Тоже вопрос есть. Я пользую arm-none-eabi-gcc. U-boot, uClinux поставил на плату, не вопрос. А зачем столько разных компиляторов типа arm-linux-gcc и прочего. Можешь объяснить. Что еще нужно поставить, чтобы софт писать?!
Ну если всю систему собирал им, то к чему другой тулчейн брать? Этим arm-none-eabi-gcc и собирай свою программу.
Ясно. С либой uClibc не все гладко. Не получается собрать ее до конца. Только часть библиотеки собирается и все. Можешь подсказать по ней что-нибудь. соответственно приложения не могу написать под uClinux. В книгах мало по этому, инфы тоже в сети не так много.
arm-none-eabi-gcc ставил в ubuntu и в ней юзаю. тут проблем никаких нет. Все ставиться и прописывается, а главное есть. Дальше проблема уже с приложениями. написать не выходит.
Что значит не выходит?
Доброе утро. Не выходит — это значит я не могу собрать uClibc, и скомпилировать код в bflt формате elf. uClibc не получается собрать до конца.
Нужна помощь в основном в этом. Последнее что нужно сделать. Не получается развернуть все инструменты, необходимые для разработки, до конца. Все остальное работает, разобрался. Помощь не нужна. Сделал.
Привет котик. Этого инструментария достаточно, чтобы развернуть систему для написания приложений под uClinux? Либа uClibc соберется?