arm-linux-gcc vs arm-elf-gcc - PullRequest
       71

arm-linux-gcc vs arm-elf-gcc

5 голосов
/ 24 декабря 2008

Я смотрю на систему uClinux, которая собирает ядро ​​с помощью arm-linux-xxx, но создает пользовательские приложения с помощью arm-elf-xxx.

Если приложения предназначены для работы в Linux, не лучше ли собрать все с помощью arm-linux-xxx?

Где установить эту опцию в общей конфигурации сборки uClinux?

Ответы [ 6 ]

2 голосов
/ 29 марта 2012

Вы можете запустить arm-linux-gcc -v и arm-elf-gcc -v, чтобы увидеть некоторые различия между этими двумя версиями gcc (такими как целевые архитектуры / языки).

2 голосов
/ 08 января 2010

Имена компиляторов не обязательно ничего не значат. В зависимости от того, кто создал компиляторы (и назвал их), вы получите разные результаты. Возможно, существует правильное имя для конкретной конфигурации, но некоторые случайно скомпилированные gcc могут быть неверными.

Информацию о компиляторах CodeSourcery (вероятно, наиболее правильные имена) см. На странице их платформы , что означает их именование.

0 голосов
/ 19 августа 2014

В нашем случае мы собираем linux с помощью sparc-elf-gcc и строим busybox (запуск приложения на linux) с использованием sparc -..- linux-gcc. и я думаю, что это правильно, а не наоборот.

0 голосов
/ 03 декабря 2010

Разница в том, что связанный вывод из набора инструментов arm-elf-xxx является загружаемым двоичным файлом linux, в то время как arm-linux-xxx выводит объект ядра (ko), который является BLOB-объектом с собственным форматом связи (для модулей ), или основное ядро, которому не нужен формат упаковки. То есть, для пользовательского пространства вы хотите, чтобы конечный динамически связанный объект был исполняемым файлом ELF, библиотекой или общим объектом. Что касается пространства ядра, вы хотите, чтобы конечный объект (ядро или модуль) был в формате связи linux-arm-kernel.

Вы заметите, что промежуточные объекты (файлы .o) обеих целей, вероятно, все являются ELF, поскольку именно этого ожидает цепочка инструментов.

0 голосов
/ 29 апреля 2009

Кажется, в какой-то момент я помню, что этот бит в середине не имел значения. Как уже упоминалось, elf - это стандартный формат файла, вы все равно захотите его использовать и получите в любом случае независимо от двоичного имени. Что может (или не может) иметь большее значение, так это соглашение о вызовах, я не знаю, нужно ли при вызове функции совместно используемой библиотеки соответствовать соглашению о вызовах или оно обрабатывается для вас где-то еще.

0 голосов
/ 24 декабря 2008

ELF - двоичный формат linux и многие другие использование:

Формат ELF заменил старый исполняемые форматы, такие как a.out и COFF во многих Unix-подобных операциях системы, такие как Linux, Solaris, IRIX, FreeBSD, NetBSD, OpenBSD, DragonFly BSD, Syllable и HP-UX (за исключением 32-битные программы PA-RISC, которые продолжаются использовать SOM). ELF также видел некоторые принятие в не-Unix операционной системы, такие как версия Itanium OpenVMS и BeOS версии 4 и позже для компьютеров на базе x86 (где он заменил портативный исполняемый файл формат; версия PowerPC осталась с предпочтительным исполняемым форматом). PlayStation Portable, PlayStation 2, Консоли PlayStation 3, Wii и GP2X также используйте ELF. AmigaOS 4 и MorphOS также работает на машинах PowerPC, используйте ELF. На платформе Amiga эльф исполняемый файл заменил предыдущий EHF (расширенный формат Hunk), который был используется на Amigas с КПП карты расширения процессора. Symbian OS v9 использует формат E32Image [3], который на основе формата файла ELF.

Большинство Sony Ericsson (например, W800i, W610, K790 и т. Д.), Некоторые Siemens (Платформы SGOLD и SGOLD2: от Siemens C65 до S75 и BenQ-Siemens E71 / EL71) и Motorola (например, E398, SLVR L7, v360, v3i и все телефон LTE2, к которому применяется патч) телефоны могут запускать файлы ELF через использование патча, который добавляет ассемблерный код к основной прошивке (известной как ELFPack, в подземном моддинге культура).

...