Чому gcc показує `unknown 'в Target: x86_64-unknown-linux-gnu в Arch Linux?


12

Мені хотілося б знати, чому під час запуску gcc -vв Arch Linux воно відображає unknownслово в цих результатах:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/5.1.0/lto-wrapper
Target: x86_64-unknown-linux-gnu

в той час як в інших дистрибутивах, як Убунту він показує назву дистрибутива, як, ubuntu:

 Using built-in specs.
 COLLECT_GCC=gcc
 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-ubuntu-linux-gnu/5.1.0/lto-wrapper
 Target: x86_64-ubuntu-linux-gnu

Звідки ви встановили цей gcc?
Faheem Mitha

gccбули встановлені разом з coreпакетами, коли я встановлював Arch.
noslin005

Гаразд. Можливо, ознайомтеся з інструкціями щодо компіляції цього пакету?
Faheem Mitha

Відповіді:


8

Як вже було сказано в коментарі, за замовчуванням цільовий триплет генерується скриптом 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 у сховищі вище.


Дивно, що GCC 6 розвивається.
акгент

OMG, тому unknownза замовчуванням жорстко кодується.
акгент

4

Це частина виробника конфігураційного / цільового триплета. 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'.

Посібник з автоконфоруванням називає це company.

Я не є експертом у компіляції з GCC, але це здається, що інформація, що надається в цьому полі, має більше інформаційний характер і unknownє лише значенням за замовчуванням, яке GCC використовує, якщо явно не переписано. Наприклад x86_64-linux-gnu, GCC на Ubuntu 12.04 використовує Debian 7s GCC i486-linux-gnu, тому цілком можливо залишити поле порожнім.


Це майже все. x86_64-linux-gnuРізноманітність є ярлик мети, стоячи на x86_64-unknown-linux-gnuабо x86_64-pc-linux-gnu. gcc -vпоказує ціль, для якої вона була складена, і config.subдає канонічну трійку (шукайте її в /usr/share/miscсистемах, похідних Debian із autotools-devвстановленими).
Стівен Кітт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.