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


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のように、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はどこからインストールしましたか?
ファヒムミタ

gcccoreArchをインストールしたときにパッケージと共にインストールされました。
noslin005

OK。そのパッケージのコンパイル手順を確認してください。
ファヒームミタ

回答:


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

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を出力します:アップストリームリポジトリのconfig.guess更新します。


GCC 6が開発中であることは驚くべきことです。
アクティラント

OMG unknown。デフォルトでハードコードされています。
アクティラント

4

それは、構成/ターゲットのトリプレットの製造者の部分です。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のマニュアルには、それを呼び出しますcompany

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


それはほとんどそれです。x86_64-linux-gnu様々な放置、ショートカットターゲットですx86_64-unknown-linux-gnux86_64-pc-linux-gnugcc -vコンパイルされたターゲットを示し、config.sub正規のトリプレットを提供します(インストールされ/usr/share/miscたDebian派生システムで探してくださいautotools-dev)。
スティーブンキット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.