gcc は ARM ターゲットの -m32 オプションを受け入れないようです。gcc が 64 ビット Linux でどのように動作するかはわかりませんが、gcc が 64 ビット Linux で実行されている ELF32 の場合、32 ビット バイナリは自動的に生成されますか?
もしそうなら、回避策はありますか?
前もって感謝します。
x86 または x86_64 を実行しているホストから ARM 用にコンパイルするには、クロスコンパイラを使用する必要があります。これは、ホストとターゲットが 2 つの完全に独立したアーキテクチャであるためです。
クロス コンパイラは通常、ARM の 32 ビットまたは 64 ビット バイナリのみを出力するように構成されます (両方ではありません)。ほとんどの ARM デバイス アプリケーションは 32 ビットのみを使用するため、引数を追加せずに ARM クロスコンパイラを使用すると、32 ビット バイナリがビルドされます。
ツールチェーンには、さらなる最適化のために armv7、arm cortex a-8 などのマシン タイプを指定するための他の -m フラグがあります。ARM クロス コンパイラのドキュメントを参照する必要があります。
ターゲットで動作し、CentOS で動作する正しいツールチェーンを入手するには、ターゲット デバイスのベンダーの Web サイトから始めることをお勧めします。
x86 命令セットと x86_64 (AMD64 または Intel EMT64) は非常に似ているため、gcc の x86_64 バージョンで提供される -m32 オプションにより、gcc は 64 ビットではなく 32 ビット バイナリをコンパイルします。特に、32 ビット命令を 64 ビット モードで非常に簡単に実行できるという事実。