Tại sao gcc hiển thị `unknown` trong Target: x86_64-unknown-linux-gnu trong Arch Linux?


12

Tôi muốn biết tại sao khi tôi chạy gcc -vtrong Arch Linux, nó hiển thị unknowntừ trong các đầu ra này:

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

trong khi ở các distro khác, như ubfox, nó hiển thị tên distro, như, 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

Bạn đã cài đặt gcc này từ đâu?
Faheem Mitha

gccđã được cài đặt với các coregói khi tôi cài đặt Arch.
noslin005

Đồng ý. Có thể kiểm tra hướng dẫn biên dịch cho gói đó, sau đó?
Faheem Mitha

Câu trả lời:


8

Như đã được đề cập trong bình luận, theo mặc định, bộ ba mục tiêu được tạo bởi tập lệnh config.guess . Logic của nó khá đơn giản. Đầu tiên nó sử dụnguname để có được một số thông tin hệ thống cơ bản:

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

Các chuỗi này được kết hợp và phù hợp với các mẫu mã hóa cứng. Kết quả cũng được mã hóa cứng:

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

Đối với một số hệ thống, có thể đưa ra kết quả có ý nghĩa hơn, như IBM trong "rs6000-ibm-aix".

Các nhà bảo trì phân phối chỉ đơn giản ghi đè chuỗi này bằng mã riêng của họ (cũng được mã hóa cứng):

$ 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 có thể sẽ xuất x86_64-pc-linux-gnu theo mặc định: config.guess được cập nhật trong kho lưu trữ ngược dòng.


Thật ngạc nhiên khi GCC 6 đang phát triển.
acgtyrant

OMG, do đó unknownđược mã hóa cứng theo mặc định.
acgtyrant

4

Đó là phần manufacterer của bộ ba cấu hình / đích. Các Autobook nói về điều đó:

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

Các nhãn hiệu autoconf gọi nó company.

Tôi không phải là chuyên gia biên dịch với GCC, nhưng có vẻ như thông tin được cung cấp bởi lĩnh vực đó mang nhiều tính chất thông tin hơn và unknownchỉ là giá trị mặc định mà GCC sử dụng trừ khi được ghi đè rõ ràng. Ví dụ x86_64-linux-gnu, GCC trên Ubuntu 12.04 sử dụng , GCC của Debian 7 i486-linux-gnu, do đó, hoàn toàn có thể để trống trường.


Nó khá là nhiều. Sự x86_64-linux-gnuđa dạng là các mục tiêu tắt, đại diện chox86_64-unknown-linux-gnu hoặc x86_64-pc-linux-gnu. gcc -vhiển thị mục tiêu mà nó đã được biên dịch và config.subđưa ra bộ ba chính tắc (tìm kiếm nó trong /usr/share/misccác hệ thống có nguồn gốc Debian autotools-devđược cài đặt).
Stephen Kitt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.