ทำไม gcc แสดง `ไม่รู้จัก 'ในเป้าหมาย: 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

ในขณะที่ distro อื่น ๆ เช่น ubuntu จะแสดงชื่อ distro เช่น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 กำลังพัฒนา
acgtyrant

OMG ดังนั้นunknownฮาร์ดโค้ดเป็นค่าเริ่มต้น
acgtyrant

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

คู่มือ autoconfcompanyเรียกมันว่า

ฉันไม่ใช่ผู้เชี่ยวชาญในการรวบรวมกับ GCC แต่ดูเหมือนว่าข้อมูลที่ได้รับจากเขตข้อมูลนั้นมีลักษณะของข้อมูลมากกว่าและunknownเป็นเพียงค่าเริ่มต้นที่ GCC ใช้เว้นแต่จะเขียนทับอย่างชัดเจน ตัวอย่างเช่นการใช้ GCC บน Ubuntu 12.04 x86_64-linux-gnu, Debian 7s GCC i486-linux-gnuดังนั้นจึงเป็นไปได้อย่างสิ้นเชิงที่จะปล่อยให้ฟิลด์ว่างเปล่า


นั่นมันสวยมาก x86_64-linux-gnuหลากหลายเป็นเป้าหมายทางลัดยืนหรือx86_64-unknown-linux-gnu แสดงเป้าหมายที่รวบรวมและมอบ canonical triplet (ค้นหาในระบบที่ได้รับการติดตั้งDebian ) x86_64-pc-linux-gnugcc -vconfig.sub/usr/share/miscautotools-dev
Stephen Kitt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.