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
우분투와 같은 다른 배포판에서는 배포판 이름을 다음과 같이 표시합니다 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
답변
주석에서 이미 언급했듯이 기본적으로 대상 삼중 항은 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 .
답변
이것이 구성 / 대상 삼중 항의 제조업체 부분입니다. 오토 북 은 다음과 같이 말합니다.
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-gnu
Debian 7s GCC i486-linux-gnu
를 사용하므로 필드를 비워 둘 수 있습니다.