Почему имя набора инструментов имеет отдельные поля OS и EABI?
Например, arm-unknown-linux-gnueabi Теперь, когда исправлена ОС, то есть Linux, будет исправлена библиотека C (GLibc) и, следовательно, будут соблюдены соглашение о вызовах и соблюдение ABI. Каково требование 4-го поля, то есть ABI отдельно? Может ли набор инструментов использовать другой ABI, чем тот, который используется базовой ОС и LIBC. В таком случае, как библиотеки, скомпилированные указанным набором инструментов, будут работать в ОС?
1 ответ
Это более или менее связано с историческими причинами, так называемыми священными войнами за имя священной операционной системы. То, что вы называете "именем цепочки инструментов", на самом деле называется целевой тройкой, и, как следует из названия, оно имеет три поля, ни больше, ни меньше. В вашем примере, поля будут:
- Машина /CPU:
arm
- Производитель:
unknown
- Операционная система:
linux-gnueabi
Возьмите другой справочный пример, с которым я уже сталкивался: i686-elf-gcc
, который используется для разработки операционной системы для любителей:
- Машина /CPU:
i686-elf
- Производитель:
unknown
(Неявный) - Операционная система:
none
(неявный; компилятор на самом деле является автономным кросс-компилятором, используемым для разработки ядер операционной системы, поэтому код, который он выводит, не ожидает базовой ОС, поскольку выходной код - это сама ОС!).
Это просто вопрос путаницы из-за того, что поля могут (и делают) использовать -
символ, который также используется для разделения полей. В вашем случае ОС считается linux-gnueabi
также известная как операционная система GNU с ядром Linux, использующая встроенный ARM ABI. Ядро Linux исторически было одним из самых переносимых программных продуктов в мире, поэтому ожидается, что оно будет переносимо на другие ARI ABI, хотя я знаю только о EABI...