web-dev-qa-db-ja.com

なぜgccはTarget:x86_64-unknown-linux-gnuでArch Linuxで「unknown」を表示するのですか?

Arch Linuxでgcc -vを実行すると、unknown Wordがこれらの出力に表示される理由を知りたいです。

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のように、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
12
noslin005

コメントですでに述べたように、デフォルトでは、ターゲットトリプレットは 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を出力します: pdated config.guess アップストリームリポジトリに。

8
Mikhail Maltsev

これは、構成/ターゲットのトリプレットのメーカー部分です。 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'.

autoconf manualcompanyと呼びます。

私はGCCでのコンパイルの専門家ではありませんが、そのフィールドによって提供される情報は情報提供を目的とするものであり、unknownは明示的に上書きしない限りGCCが使用するデフォルト値にすぎません。たとえば、Ubuntu 12.04のGCCはx86_64-linux-gnu、Debian 7s GCC i486-linux-gnuを使用しているため、フィールドを空白のままにすることは完全に可能です。

4
Wieland