arm-linux-gnu-gcc および arm-linux-gcc

arm-linux-gnu-gcc および arm-linux-gcc

ARM用Cプログラムクロスコンパイルに使用する必要があるものarm-linux-gnu-gcc との違いは何ですか?arm-linux-gcc

ベストアンサー1

プロセッサ(「ベアメタル」システム)で独立して実行するようにプログラムをコンパイルする場合、最も重要なのは、特定のプロセッサの命令を生成するコンパイラを持つことです。 「For ARM」はほとんど十分な情報ですが、十分ではありません。命令セットのバージョンも指定する必要があります。今日、ほとんどのARMプロセッサは同じバージョン(ARMv7)に基づいていますが、内部的にも多くの複雑さがあります。一部の機能(浮動小数点、ベクトル命令など)はオプションであるため、使用するかどうかを指定する必要がありますが、ARMv7実際には2つの命令セット(「一般」ARMとThumb)があります。ほとんどのARM用GCCディストリビューションはARMv7を対象としており、オプション機能とThumbはオプションで有効になっています。

他のプログラムと対話するプログラムをコンパイルするには、関連するすべてのプログラムが通信できる必要があります。システムコールともっと重要なことは、ライブラリ呼び出しを実行するには、呼び出し元と呼び出し受信者がデータのバイナリ表現(バイト順など)とデータ転送方法(関数引数に使用されるレジスタ、関数呼び出しがデータに与える影響)に同意する必要があります。 。スタックなど)。動作原理の仕様は次のとおりです。ABI(アプリケーションバイナリインタフェース)

これGCCクロスコンパイラの一般的な命名規則はい(前の部分はCPU-VENDOR-SYSTEM-gcc-gccシステムタイプ)configureしかし、その部分には多少曖昧な部分があります。 ARMのクロスコンパイラは通常、呼び出し時に一部を省略します。たとえば、ARMのGCC(デフォルトはv7)、ACMEのLinuxディストリビューションでは、gnueabi ABIを使用してGlibcに接続するように設定されています。指定されていないABIを使用してLinux上のGlibcに接続するように設定されたコンパイラを示します。ターゲットlibcが指定されていません。VENDOR-SYSTEMarm-VENDOR-OS-LIBC-ABI-gccarm-acme-linux-gnu-gnueabi-gccarm-linux-gnu-gccarm-linux-gcc

おすすめ記事