아치 리눅스에서 대상에 x86_64-unknown-linux-gnu에서 gcc가 '알 수 없음'을 표시하는 이유는 무엇입니까?


12

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

이 gcc는 어디에서 설치 했습니까?
Faheem Mitha

gcccore아치를 설치할 때 패키지 와 함께 설치되었습니다.
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)...

일부 시스템의 경우 "rs6000-ibm-aix"의 IBM과 같이보다 의미있는 결과를 제공 할 수 있습니다.

배포판 관리자는 단순히이 문자열을 자체 하드 코드로 재정의합니다.

$ 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

이것이 구성 / 대상 삼중 항의 제조업체 부분입니다. 오토 북 은 다음과 같이 말합니다.

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를 매뉴얼 을 호출합니다 company.

저는 GCC 컴파일 전문가가 아니지만 해당 필드에서 제공하는 정보가 더 많은 정보를 제공하고 unknown명시 적으로 덮어 쓰지 않는 한 GCC가 사용하는 기본값 인 것 같습니다. 예를 들어 Ubuntu 12.04의 GCC는 x86_64-linux-gnuDebian 7s GCC i486-linux-gnu를 사용하므로 필드를 비워 둘 수 있습니다.


거의 다됐다. x86_64-linux-gnu다양한 위해 서, 바로 가기 대상입니다 x86_64-unknown-linux-gnux86_64-pc-linux-gnu. gcc -v컴파일 된 대상을 표시하고 config.sub표준 삼중 항을 제공합니다 ( 설치된 /usr/share/misc데비안 파생 시스템 에서 찾으십시오 autotools-dev).
Stephen Kitt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.