Warum zeigt gcc in Target `unknown`: x86_64-unknown-linux-gnu in Arch Linux?


12

Ich möchte wissen, warum, wenn ich gcc -vunter Arch Linux laufe , das unknownWort in diesen Ausgaben angezeigt wird:

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

während in einer anderen Distribution, wie Ubuntu, der Name der Distribution angezeigt wird 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

Woher hast du diesen gcc installiert?
Faheem Mitha

gccwurden mit den corePaketen installiert, als ich Arch installierte.
noslin005

In Ordnung. Überprüfen Sie dann vielleicht die Kompilierungsanweisungen für dieses Paket?
Faheem Mitha

Antworten:


8

Wie bereits im Kommentar erwähnt, wird das Ziel-Triplet standardmäßig vom Skript config.guess generiert . Die Logik ist ziemlich einfach. Zuerst werden unameeinige grundlegende Systeminformationen abgerufen:

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

Diese Zeichenfolgen werden kombiniert und mit fest codierten Mustern abgeglichen. Das Ergebnis ist auch fest codiert:

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

Für einige Systeme ist es möglich, aussagekräftigere Ergebnisse zu liefern, wie z. B. IBM in "rs6000-ibm-aix".

Distributionsbetreuer überschreiben diese Zeichenfolge einfach mit ihrer eigenen (auch fest codierten):

$ 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 wird wahrscheinlich standardmäßig x86_64-pc-linux- gnu ausgeben : Die Datei config.guess wurde im Upstream-Repository aktualisiert .


Erstaunlich, dass sich GCC 6 weiterentwickelt.
acgtyrant

OMG ist also unknownstandardmäßig fest codiert.
acgtyrant

4

Das ist der Hersteller-Teil des Konfigurations- / Ziel-Triplets. Das Autobook sagt dazu:

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

Das Autoconf-Handbuch nennt es company.

Ich bin kein Experte für die Kompilierung mit GCC, aber es scheint, dass die Informationen in diesem Feld eher informativen Charakter haben und unknownnur der Standardwert sind, den GCC verwendet, sofern sie nicht ausdrücklich überschrieben werden. GCC unter Ubuntu 12.04 verwendet beispielsweise x86_64-linux-gnuDebian 7s GCC i486-linux-gnu, so dass es durchaus möglich ist, das Feld leer zu lassen.


Das wars so ziemlich. Die x86_64-linux-gnuVielfalt sind Abkürzungsziele, die für x86_64-unknown-linux-gnuoder stehen x86_64-pc-linux-gnu. gcc -vzeigt das Ziel an, für das es kompiliert wurde, und config.subgibt das kanonische Triplet an (suchen Sie es in /usr/share/miscvon Debian abgeleiteten Systemen mit autotools-devinstalliertem).
Stephen Kitt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.