Arch Linuxのターゲット:x86_64-unknown-linux-gnuでgccが `unknown`を表示するのはなぜですか?

Arch Linuxのターゲット: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などの他のディストリビューションでは、次のディストリビューション名が表示されます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コンパイルの専門家ではありませんが、このフィールドで提供される情報は情報提供に近いものであり、明示的にオーバーライドされない限り、GCCが使用するデフォルト値にすぎませんunknown。たとえば、Ubuntu 12.04のGCCはx86_64-linux-gnuDebian 7s GCCを使用しているため、i486-linux-gnuこのフィールドを空白のままにしてもかまいません。

関連情報