Debian(64bit)で32bitバイナリを実行もしくは作成する方法(C言語)

検証環境

Debian10(64Bit)、Ryzen 7 3800X環境で検証します。CPUアーキテクチャはIntel/AMDを想定しており、ARMに関しては本記事で説明しません。

                    

Host環境/実行バイナリのBit数を確認する方法

まず、前提条件となる「Host環境のBit数」および「実行バイナリのBit数」を確認する方法です。

ビルドを行うHost環境のBit数は、unameコマンドで確認できます。i386(i686)と表示された場合は32Bit、x86_64と表示された場合は64Bitです。以下、実行例(64Bit)です。

実行バイナリのBit数はfileコマンドで確認できます。以下、実行例(32Bit)です。

                                  

32Bitバイナリの実行方法

64Bit環境で32Bitバイナリを実行すると、”No such file or direcotry.”と表示され、バイナリが存在するにも関わらず実行できない(認識すらしていない)事があります。

この現象の原因は、32Bitライブラリが不足している事です。DebianおよびDebian派生のUbuntuなどは、Multiarchと呼ばれる仕組みで、複数のCPUアーキテクチャ(例:32Bitと64Bitのアーキテクチャ)向けのソフトウェアをインストールできます。

Multiarchを利用する場合、まずはi386(Host環境とは別アーキテクチャ)のパッケージを取得できる状態にします。

次に、32Bitバイナリを実行するために必要なライブラリをインストールします。CPUアーキテクチャを指定したパッケージは、”apt install <パッケージ名:アーキテクチャ名>”の書式で取得できます。

                           

上記のインストール処理が終了すれば、32bitバイナリが実行できます。以下、実行例です。

                             

32Bitバイナリの作成(コンパイル)方法

64Bit環境で32Bitバイナリを作成するには、gccオプションの”-m32″を使用します。以下、-m32オプションの有無で、生成されるバイナリのBit数が変わる例です。

                           

おすすめ