Perché gcc mostra `unknown` in Target: x86_64-unknown-linux-gnu in Arch Linux?


12

Vorrei sapere perché quando eseguo gcc -vArch Linux, mostra la unknownparola in questi output:

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

mentre in altre distro, come Ubuntu, mostra il nome della distro, come 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

Da dove hai installato questo gcc?
Faheem Mitha,

gccsono stati installati con i corepacchetti durante l'installazione di Arch.
noslin005,

Ok. Magari controlla le istruzioni di compilazione per quel pacchetto, allora?
Faheem Mitha,

Risposte:


8

Come già menzionato nel commento, per impostazione predefinita la tripletta di destinazione viene generata dallo script config.guess . La sua logica è abbastanza semplice. Innanzitutto utilizza unameper ottenere alcune informazioni di base sul sistema:

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

Queste stringhe sono combinate e abbinate a modelli hardcoded. Il risultato è anche hardcoded:

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

Per alcuni sistemi è possibile dare risultati più significativi, come IBM in "rs6000-ibm-aix".

I manutentori della distribuzione hanno semplicemente la precedenza su questa stringa con il proprio (anche hardcoded):

$ 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 probabilmente produrrà x86_64-pc-linux-gnu di default: config.guess aggiornato nel repository upstream.


Incredibile che GCC 6 si stia sviluppando.
acgtyrant il

OMG, quindi unknownè codificato per impostazione predefinita.
acgtyrant il

4

Questa è la parte del produttore della tripletta di configurazione / destinazione. L' Autobook afferma che:

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'.

Il manuale di autoconf lo chiama company.

Non sono un esperto di compilazione con GCC, ma sembra che le informazioni fornite da quel campo siano più di natura informativa ed unknownè solo il valore predefinito che GCC usa se non esplicitamente sovrascritto. GCC su Ubuntu 12.04 ad esempio usa x86_64-linux-gnuDebian 7s GCC i486-linux-gnu, quindi è del tutto possibile lasciare il campo vuoto.


È praticamente tutto. La x86_64-linux-gnuvarietà sono obiettivi di scelta rapida, in piedi per x86_64-unknown-linux-gnuo x86_64-pc-linux-gnu. gcc -vmostra la destinazione per cui è stato compilato e config.subfornisce la tripletta canonica (cercatela /usr/share/miscsui sistemi derivati ​​da Debian con autotools-devinstallato).
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.