Mengapa gcc menampilkan `unknown` di Target: x86_64-unknown-linux-gnu di Arch Linux?


12

Saya ingin tahu mengapa ketika saya menjalankan di gcc -vbawah Arch Linux, itu menunjukkan unknownkata di output ini:

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

sedangkan di distro lain, seperti ubuntu ia menunjukkan nama distro, seperti 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

Dari mana Anda menginstal gcc ini?
Faheem Mitha

gccDiinstal dengan corepaket ketika saya menginstal Arch.
noslin005

Baik. Mungkin memeriksa petunjuk kompilasi untuk paket itu, lalu?
Faheem Mitha

Jawaban:


8

Seperti yang telah disebutkan dalam komentar, secara default triplet target dihasilkan oleh skrip config.guess . Logikanya cukup sederhana. Pertama digunakan unameuntuk mendapatkan beberapa informasi sistem dasar:

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

String ini digabungkan dan dicocokkan dengan pola hardcode. Hasilnya juga hardcoded:

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

Untuk beberapa sistem dimungkinkan untuk memberikan hasil yang lebih bermakna, seperti IBM dalam "rs6000-ibm-aix".

Pengelola distribusi cukup mengesampingkan string ini dengan milik mereka sendiri (juga dengan hardcode):

$ 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 mungkin akan menampilkan x86_64-pc-linux-gnu secara default: perbarui config.guess di repositori hulu.


Luar biasa perkembangan GCC 6.
Acgtyrant

OMG, jadi unknownhardcode secara default.
acgtyrant

4

Itulah bagian manufacterer dari konfigurasi / target triplet. The autobook mengatakan tentang itu:

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

The pengguna autoconf menyebutnya company.

Saya bukan ahli dalam kompilasi dengan GCC, tetapi sepertinya informasi yang diberikan oleh bidang itu lebih bersifat informasi dan unknownhanya nilai default yang digunakan GCC kecuali ditimpa secara eksplisit. GCC pada Ubuntu 12.04 misalnya menggunakan x86_64-linux-gnu, Debian 7s GCC i486-linux-gnu, jadi sangat mungkin untuk membiarkan bidang itu kosong.


Cukup banyak. The x86_64-linux-gnuberbagai adalah target shortcut, berdiri untuk x86_64-unknown-linux-gnuatau x86_64-pc-linux-gnu. gcc -vmenunjukkan target yang dikompilasikan, dan config.submemberikan triplet kanonik (lihat /usr/share/miscpada sistem yang diturunkan dari Debian dengan yang autotools-devdiinstal).
Stephen Kitt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.