開発環境

64ビットのGCCで32ビットのバイナリを生成する方法

最近のPCは殆どが64ビットになり、OSも64ビットが普通になりました。
一方、組込みでは32ビットのCPUが使用されることも多く、
64ビット上でコンパイルしたバイナリは、32ビットの実機上では動きません。

32ビットでちょっとしたことを確認するために、32ビットの OS を探して環境構築するのは面倒。
何か他に方法がないかを探した際の備忘録です。

 

パッケージのインストール

OS は Ubuntu 20.04 LTS、64ビットを使用しています。
apt で標準の GCC(64ビット)と、32ビットの標準Cライブラリをインストールします。

 command
$ sudo apt install gcc
$ sudo apt install libc6-dev-i386

 

コンパイルオプション

apt でインストールされる GCC は 64ビット版のため、オプションを付与してコンパイルします。
-m32」というコンパイルオプションを追加します。

 command
$ gcc -m32 hello.c -o test


 

バイナリの確認

バイナリファイルが何ビット向けにコンパイルされているかは、readelf コマンドを使って確認できます。

 command
$ readelf -h test
(snip)
クラス: ELF32
(snip)
マシン: Intel 80386
(snip)

「クラス」と「マシン」あたりで確認できます。

32ビットの場合は、「ELF32」「Intel 80386」と表示され、
64ビットの場合は、「ELF64」「Advanced Micro Devices x86-64」と表示されます。

SANACHAN
SANACHAN
コンパイルオプションだけで切替できるのは便利ですね。

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-開発環境
-, ,