Почему gcc показывает `unknown` в Target: x86_64-unknown-linux-gnu в Arch Linux?

ps aux | grep $(echo fnord | sed "s/^\(.\)/[\1]/g")
12
30.05.2015, 00:33
2 ответа

Это производственная часть тройки конфигурация / цель. Об этом говорится в Autobook :

manufacturer
   A somewhat freeform field which indicates the manufacturer of the system. This is often simply `unknown'. Other common strings are `pc' for an IBM PC compatible system, or the name of a workstation vendor, such as `sun'.

В руководстве autoconf это называется company .

Я не эксперт в компиляции с GCC, но похоже, что информация, предоставляемая этим полем, носит скорее информационный характер, а unknown - это просто значение по умолчанию, которое GCC использует, если явно не перезаписано. GCC в Ubuntu 12.04, например, использует x86_64-linux-gnu , Debian 7s GCC i486-linux-gnu , поэтому вполне возможно оставить поле пустым.

4
27.01.2020, 19:56

Как уже было сказано в комментарии, по умолчанию целевой триплет генерируется скриптом config.guess. Его логика довольно проста. Сначала он использует uname для получения базовой информации о системе:

UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown

Эти строки комбинируются и сопоставляются с жестко закодированными шаблонами. Результат также жестко закодирован:

case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
...(snip)...
    x86_64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
...(snip)...

Для некоторых систем можно дать более значимый результат, например, IBM в "rs6000-ibm-aix".

Сопровождающие дистрибутивы просто переопределяют эту строку своей собственной (также жестко закодированной):

$ gcc -v
...(snip)...
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10'
...(snip)...
--target=x86_64-linux-gnu

GCC 6, вероятно, будет выводить x86_64-pc-linux-gnu по умолчанию: обновлен config.guess в репозитории upstream.

8
27.01.2020, 19:56

Теги

Похожие вопросы