Hatena::Grouplinux2

Going My Linux Way このページをアンテナに追加 RSSフィード

2012年12月28日(金)

Ubuntu 64bit で32bit バイナリのコンパイル

18:05 | Ubuntu 64bit で32bit バイナリのコンパイル - Going My Linux Way を含むブックマーク はてなブックマーク - Ubuntu 64bit で32bit バイナリのコンパイル - Going My Linux Way Ubuntu 64bit で32bit バイナリのコンパイル - Going My Linux Way のブックマークコメント

Ubuntu 64bit で32bit バイナリコンパイルをするときは、

gcc に -m32 フラグをつけるそうです。

$ CFLAGS=-m32 make hello

または、

$ gcc -m32 -o hello hello.c

ですが、実行すると以下のエラーがでました。

/usr/include/features.h:324:26: 致命的エラー: bits/predefs.h: そのようなファイルやディレクトリはありません

これは、libc6-dev-i386 パッケージをインストールすると解決できます。

$ sudo apt-get install libc6-dev-i386
$ CFLAGS=-m32 make hello   # もう一度トライ

----

ちなみに、

32ビット版バイナリを file コマンドで表示すると以下のように見えます。

$ file hello32
hello32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xf4b60d24e85b520638ccfb0f12c99375aa53a849, not stripped

64ビット版では以下のように見えます。

$ file hello64
hello64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xef1c6b042bbf20825fa2de8e3eb48dba41bff2b1, not stripped
トラックバック - http://linux2.g.hatena.ne.jp/lnznt/20121228