Neden gcc Hedef'te "bilinmeyen" i gösteriyor: Arch Linux'ta x86_64-unknown-linux-gnu?


12

Neden gcc -vArch Linux altında çalıştığımda, unknownbu çıktılarda kelimeyi gösterdiğini bilmek istiyorum :

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

diğer dağıtımda, ubuntu gibi dağıtım adını gösterir, şöyle 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

Bu gcc'yi nereden yüklediniz?
Faheem Mitha

gccArch'ı corekurarken paketlerle birlikte kuruldu.
noslin005

Tamam. Belki de o paketin derleme talimatlarını kontrol edin?
Faheem Mitha

Yanıtlar:


8

Yorumda daha önce bahsedildiği gibi, varsayılan olarak hedef üçlüsü config.guess betiği tarafından oluşturulur . Mantık oldukça basit. İlk olarak unamebazı temel sistem bilgilerini almak için kullanılır :

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

Bu dizeler birleştirilir ve sabit kodlanmış desenlerle eşleştirilir. Sonuç ayrıca kodlanmıştır:

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

Bazı sistemler için, "rs6000-ibm-aix" deki IBM gibi daha anlamlı sonuçlar vermek mümkündür.

Dağıtım koruyucular bu dizeyi kendileriyle (ayrıca sabit kodlanmış) geçersiz kılar:

$ 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 muhtemelen varsayılan olarak x86_64-pc-linux-gnu çıktısı verir: yukarı akış deposunda güncellenmiş config.guess .


GCC 6'nın gelişmesi şaşırtıcı.
acgtyrant

OMG, unknownvarsayılan olarak sabit kodlanmıştır.
acgtyrant

4

Bu, yapılandırma / hedef üçlüsünün üretici kısmıdır. Autobook bu konuda şunları söylüyor:

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 manuel diyor company.

GCC ile derleme konusunda uzman değilim, ancak bu alan tarafından sağlanan bilgilerin daha fazla bilgi niteliği taşıdığı ve unknownaçıkça yazılmadığı sürece GCC'nin kullandığı varsayılan değer olduğu anlaşılıyor . Ubuntu 12.04'teki GCC x86_64-linux-gnu, Debian 7s GCC'yi kullanır i486-linux-gnu, bu nedenle alanı boş bırakmak tamamen mümkündür.


Hepsi bukadar. x86_64-linux-gnuÇeşitli için ayakta kısayol hedeflerdir x86_64-unknown-linux-gnuveya x86_64-pc-linux-gnu. gcc -vderlendiği hedefi gösterir ve config.subkanonik üçlüyü verir ( yüklü /usr/share/miscDebian türevli sistemlerde arayın autotools-dev).
Stephen Kitt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.