2015-10-04 19 views
2

Для примера. arm-unknown-linux-gnueabi Теперь, когда ОС i.e Linux исправлена, C-библиотека будет исправлена ​​(GLibc), и, следовательно, соглашение о вызове и последующее ABI будут исправлены. Каково требование 4-го поля, например ABI? Может ли инструментальная цепочка использовать другой ABI из той, которая используется базовой ОС и LIBC. В этом случае, как библиотеки, скомпилированные указанной инструментальной цепочкой, запускаются в ОС?Почему имя инструментальной цепочки имеет отдельные поля ОС и EABI.?

ответ

3

Это более или менее исторические причины, a.k.a the holy wars about the sacred operating system's name. То, что вы называете «имя инструментальной цепочки», на самом деле называется Target Triplet, и, как следует из названия, оно имеет три поля, не более или менее. В вашем примере случае поля будут:

  • Machine/CPU: arm
  • Производитель: unknown
  • Операционная система: linux-gnueabi

Возьмем другой справочный пример я уже сталкивался: i686-elf-gcc, который используется для hobbyist operating system development:

  • Machine/CPU: i686-elf
  • Производитель: unknown (неявный)
  • Операционная система: none (неявное; компилятор фактически является freestandingcross compiler, который используется для разработки operating system kernels, поэтому выводимый код не ожидает базовой ОС, так как выходной код является самой ОС!).

Это просто вопрос путаницы, происходящая из того факта, что поля могут (и сделать) использовать - символ, который используется для разделения полей, тоже. В вашем случае ОС считается linux-gnueabi, иначе известной как операционная система GNU с ядром Linux, используя Embedded ARM ABI. Ядро Linux has historically been one of the most portable pieces of software in the world, поэтому ожидается, что оно будет переносимым для других ARI ABI, хотя я знаю только EABI ...

+0

Спасибо! поэтому Linux использует встроенный ABI. Еще одно сомнение заключается в том, как ABI привязана к C std Library (например, GLibc) и OS .. (В этом конкретном случае, я думаю, LibC был скомпилирован с использованием компилятора, который использует соглашение EABI и машинный код, сгенерированный этим компилятором также использует EABI ..? Это? –

+0

@BhavikAmeta: Вы (по-видимому) используете кросс-компилятор (см. ссылку в моем ответе), поэтому ваш компилятор, вероятно, * не * работает на ARM EABI, но генерирует для него код Целевой триплет фактически не имеет ничего общего с библиотекой C. Это не имеет особого смысла, ведь C не имеет ничего общего с ABI. Например, если вы пишете программу в сборке, то что бы было поле C-библиотеки установлено на '' unknown'? Тогда нам понадобится еще одна инструментальная цепочка для сборки! Во всяком случае, [много других библиотек C для GNU/Linux помимо Glibc] (http: //www.etalabs .net/compare_libcs.html). – 3442

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

  • Нет связанных вопросов^_^