Arch Linux의 Target: x86_64-unknown-linux-gnu에서 gcc가 `unknown`을 표시하는 이유는 무엇입니까?

Arch Linux의 Target: x86_64-unknown-linux-gnu에서 gcc가 `unknown`을 표시하는 이유는 무엇입니까?

gcc -vArch 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

우분투와 같은 다른 배포판에서는 다음과 같은 배포판 이름을 표시합니다 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

답변1

의견에서 이미 언급했듯이 기본적으로 대상 삼중항은 다음과 같이 제공됩니다.구성.추측스크립트. 그 논리는 매우 간단합니다. 먼저 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를 출력할 수 있습니다.구성이 업데이트되었습니다.업스트림 저장소에 있습니다.

답변2

이는 구성/대상 삼중항의 제조업체 부분입니다. 이것자동 예약이렇게 말했습니다.

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

이것자동 구성 매뉴얼불러라 company.

나는 GCC 컴파일 전문가는 아니지만 이 필드에서 제공하는 정보는 정보 제공에 더 가깝고 unknown명시적으로 재정의되지 않는 한 GCC에서 사용하는 기본값일 뿐인 것 같습니다. 예를 들어 Ubuntu 12.04의 GCC는 x86_64-linux-gnuDebian 7s GCC를 사용하므로 i486-linux-gnu이 필드를 비워 두어도 괜찮습니다.

관련 정보