最近の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
1 2 3 4 5 6 7 8 |
#include <stdio.h> int main(void) { printf("Hello world!\n"); return 0; } |
バイナリの確認
バイナリファイルが何ビット向けにコンパイルされているかは、readelf コマンドを使って確認できます。
command
$ readelf -h test
(snip)
クラス: ELF32
(snip)
マシン: Intel 80386
(snip)
「クラス」と「マシン」あたりで確認できます。
32ビットの場合は、「ELF32」「Intel 80386」と表示され、
64ビットの場合は、「ELF64」「Advanced Micro Devices x86-64」と表示されます。