これは少し複雑です。インストール中にGCCがどのように構成され、コンパイルされたかによって異なります。私のUbuntu 16.04 x64システムには、GCCがインストールされています。
ターミナルで私はgcc -v
を入力すると、私はGCCは、x64のLinux用のコードを生成することを意味しており、--target=x86_64-linux-gnu
を取得します。 --host=x86_64-linux-gnu
はを意味します。GCC自体はx64 Linuxアプリケーションです。これ以上のものはlinkにあります。
もう1つの有用な出力は--with-multilib-list=m32,m64,mx32
です。つまり、デフォルトの64ビットアプリケーションと、2種類の32ビットアプリケーション(-m32と-mx32)をコンパイルできます。
最後に、--with-tune=generic
です。これは、アプリケーションがgeneric x64プラットフォーム用にコンパイルされ、x64 Linuxボックスのどこでも実行できることを意味します。
オーバーライドするには、-march
と-mtune
の2つのオプションがあります。 Archオプションは、特定のCPU固有のintructionを使用するようにコンパイラに指示します。チューンは与えられた最高のCPUに合うようにコード生成をチューニングします。 CPUは特定のプラットフォーム(例えばsandybridge)、汎用プラットフォーム(通常はデフォルト)またはnative
のいずれかであり、コンパイル時にGCCがホストCPUをチェックし、コード生成/チューニングを行います。
最後のオプションセットは、FPUの設定をカバーします。使用するユニット(x87またはSSE2 +)、命令セット(SSE2,3,4、AVX)などをこのlinkに含めることができます。
答えてくれてありがとうございますが、--target = x86_64-linux-gnuをgccオプションとして指定すると、一般的なx86_64アーチシステムが正しく動作しますか?つまり、すべてのプロセッサが同じ命令セットに従うということですか? –
@Ranjithはい、一般的なアーチでは、10年以上前にAMDが定義した汎用x86_64 - 16個の整数レジスタ、16個のSSE2、64ビットISA、フラットアドレス空間。つまり、すべてのプロセッサが同じ命令セットに従っているということですか?それは、互換性のあるx64 CPU(AMD、Intel、VIA)が共有する最小のサブセットなので、一般的なx86_64をターゲットとするプログラムはこれらのCPUで動作します。 –