Linux logo

仮想環境のLinuxでCのプログラムを書いて、実機のLinuxにコピーして実行してみると

「bash: ./a.out: バイナリファイルを実行できません」

と表示されてしまいました。

スポンサードリンク

1ワードが32ビットと64ビット

ちょっと調べてみて、ワード長が違うことにようやく気づきました。

仮想環境のLinuxは1ワード64bitに対して、実機のLinuxは1ワード32bitでした。

OSのビットの違いを普段あまり意識していないので忘れていました。

C言語のような高級言語上では同じ様に書かれていても、ワード長が違う環境で動かすので機械語で見ると違ってくるんですね。

どうりで実機で再コンパイルすれば実行できるわけですね、納得です。

64ビット環境で32ビット用にコンパイル

では、64ビット版Linuxで32ビット用にコンパイルするにはどうすればいいのか、調べて実践してみました。

最終的にはgccのオプションに-m32を追加してコンパイルするだけですが、64ビットの環境では32ビット版のパッケージがインストールされていないそうなので、端末からインストールします。

32bit版のパッケージがインストールできたら、-m32オプションを付けてコンパイルするだけです。

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

32bit用にコンパイルするのもオプションを付けるだけなので手間もかからず簡単ですね。

Linuxのgccで32ビット用のバイナリにコンパイルする方法
Tagged on:

コメントを残す