Linux で Windows のバイナリを作成

口内炎が痛くてやるきでないので、気晴らしにクロスコンパイルしてみました。

ロスコンパイル、名前は知っていましたがやったことありません。なんだか必殺技みたいでかっこいいです。

試した環境は CentOS 6.5 です。


まず mingw32-gcc というものが必要らしいので入れます。

$ sudo yum install mingw32-gcc

ソースファイルを作ります。

hello.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("hello, world\n");
    system("pause");
    return 0;
}

コンパイルします。Windows なので拡張子は exe にしています。

$ i686-pc-mingw32-gcc hello.c -o hello.exe

出来あがったバイナリを見てみます。先頭の "MZ" が Windows っぽい雰囲気を醸し出しています。

$ hexdump -C hello.exe | head -1
00000000  4d 5a 90 00 03 00 00 00  04 00 00 00 ff ff 00 00  |MZ..............|

Windows にコピーして実行してみます。

C:\>hello.exe
hello, world
続行するには何かキーを押してください . . .

こういうのはクロスコンパイルとは呼ばないのかもしれないけど、そういうのの本職じゃないから細かいことはわかりません。