64bit版のUbuntu10.04を使っているが、32bitでコンパイル必要があったため、32bitでコンパイルする方法を調べた。
インストールライブラリ
32bitでコンパイルするため、利用するCライブラリなども32bit版をインストールする必要がある。
sudo apt-get install ia32-libs
コンパイル・リンク
コンパイルとリンクに「-m32」のオプションを指定すればよい。
ちなみに、64bit版OSなので、-m32をつけないと64bitでコンパイル、リンクされるが、「-m64」をつけて明示的に64bitとしてコンパイル、リンクも可能。
サンプルソース(64bitと32bitの変数サイズの違いを表示する)
64bit版と32bit版のバイナリでは、同じ変数方でも必要とする変数のサイズが異なる。
というわけで、各変数型のサイズを表示して、確認してみる。
ソース(size.c)
#include <stdio.h>
int main( int argc, char *argv[] ){
printf("char size : %d \n",(int)sizeof(char));
printf("short size : %d \n",(int)sizeof(short));
printf("int size : %d \n",(int)sizeof(int));
printf("float size : %d \n",(int)sizeof(float));
printf("long size : %d \n",(int)sizeof(long));
printf("void* size : %d \n",(int)sizeof(void*));
printf("double size : %d \n",(int)sizeof(double));
printf("long long size : %d \n",(int)sizeof(long long ));
printf("long double size : %d \n",(int)sizeof(long double));
}
コンパイル
gcc -m64 -o size64 size.c
gcc -m32 -o size32 size.c
実行結果
まずは64bitから。
$ ./size64
char size : 1
short size : 2
int size : 4
float size : 4
long size : 8
void* size : 8
double size : 8
long long size : 8
long double size : 16
次に32bit
$ ./size32
char size : 1
short size : 2
int size : 4
float size : 4
long size : 4
void* size : 4
double size : 8
long long size : 8
long double size : 12
この結果を見ると、long、ポインタ、long doubleのサイズが異なることがわかる。
最終更新:2010年10月16日 19:04