MinGW-w64を導入
Win32/64向けにC/C++のクロスコンパイラ環境をUbuntu(Trusty Tahr)上にちょこっと作る*1。
$ apt-get --simulate install mingw-w64 注意: これはシミュレーションにすぎません! ...snip 以下の特別パッケージがインストールされます: binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 gcc-mingw-w64 gcc-mingw-w64-base gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 gfortran-mingw-w64 gfortran-mingw-w64-i686 gfortran-mingw-w64-x86-64 gnat-mingw-w64 gnat-mingw-w64-base gnat-mingw-w64-i686 gnat-mingw-w64-x86-64 mingw-w64-common mingw-w64-i686-dev mingw-w64-x86-64-dev 提案パッケージ: gcc-4.8-locales ...snip
mingw-w64を指定するだけだと推奨パッケージもインストールされてしまう。
FORTRANはともかくAdaは自分には不要です。
差し当たり使う見込みの無いこの二つを除外するには、
$ apt-get --simulate install --no-install-recommends mingw-w64 注意: これはシミュレーションにすぎません! ...snip 以下の特別パッケージがインストールされます: binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 gcc-mingw-w64 gcc-mingw-w64-base gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 mingw-w64-common mingw-w64-i686-dev mingw-w64-x86-64-dev 提案パッケージ: gcc-4.8-locales 推奨パッケージ: gfortran-mingw-w64 gnat-mingw-w64 ...snip
推奨パッケージをインストールしないようにapt-getに指示すればよい。
本当にインストールするときはsudoを忘れずに。
$ sudo apt-get install --no-install-recommends mingw-w64 ...snip 58.1 MB のアーカイブを取得する必要があります。 この操作後に追加で 312 MB のディスク容量が消費されます。 ...snip
300MB強も容量食べてる……
とりあえず試しに、
hello.c
#include <windows.h> #include <tchar.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, _T("hello world"), _T("greeting"), MB_OK); return 0; }
をWin32向けにコンパイルして、
$ i686-w64-mingw32-gcc -Wall -ansi -pedantic -o hello.exe hello.c -mwindows $ file hello.exe hello.exe: PE32 executable (GUI) Intel 80386, for MS Windows $ objdump -p hello.exe | grep "DLL N" DLL Name: KERNEL32.dll DLL Name: msvcrt.dll DLL Name: USER32.dll
Win32向けの実行イメージが出力され、
依存するDLLも想定したものになっているようだ。
Win32環境にできたものを持っていって*2、実行すると、
メッセージボックスがきちんと表示された。すばらっ