FreeBSDにMinGWをインストール
FreeBSDにMinGWを導入するメモ。
GNU CコンパイラでWindowsプログラムをクロスコンパイル出来る様になる。
インストール
Ports化されてるのでインストールは簡単。
Portsでdevel/mingw32-gccをインストールする。
これで、MinGWのライブラリも依存関係で自動的にインストールされる。
インストールされたツールは、/usr/local/bin/mingw32-*****という名前で使える。
gccならmingw32-gccになっている。
$ cd /usr/local/bin $ ls mingw32-* mingw32-addr2line mingw32-gcc mingw32-mingw32-gcjh mingw32-addr2name.awk mingw32-gcc-3.4.5 mingw32-nm mingw32-ar mingw32-gccbug mingw32-objcopy mingw32-as mingw32-gcj mingw32-objdump mingw32-c++ mingw32-gcjh mingw32-ranlib mingw32-c++filt mingw32-gcov mingw32-readelf mingw32-cpp mingw32-grepjar mingw32-size mingw32-dlltool mingw32-jar mingw32-strings mingw32-dllwrap mingw32-jcf-dump mingw32-strip mingw32-g++ mingw32-jv-scan mingw32-windres
サンプルプログラム
適当なサンプルプログラムを作ってmingw32-gccでコンパイルすれば、勝手に拡張子にexeが付いてWindows用のプログラムが出来上がる。
$ mingw32-gcc test.c $ ls *.exe a.exe
システムに依存する関数は使えない。
下記プログラムはFreeBSDのgccではコンパイル出来るが、mingw32-gccではgrp.hがインクルード出来ずにコンパイルエラーが出る。
#include#include /* グループ情報を扱うヘッダ */ int main() { struct group *g; g = getgrent(); /* FreeBSDならwheelが表示される */ printf("%s\n", g->gr_name); return 0; }
GNUツールを移植
試しにgzip 1.3.9を移植してみる。
GNUツールの中でも、これは簡単に移植できる。
ソースを展開して、gzip.cの最初の方に「#define SIGPIPE 13」を付け加える。
#ifdef RCSID static char rcsid[] = "$Id: gzip.c,v 1.11 2006/12/12 00:03:17 eggert Exp $"; #endif #define SIGPIPE 13 #include#include #include #include #include #include
下記の通りにconfigureする。
CFLAGS(コンパイラオプション)は好みで指定する。
gzipの場合、hostとtargetをmingw32にするのがミソ。
$ CFLAGS="-O2 -fno-strict-aliasing -pipe" \ ./configure \ --host=mingw32 \ --target=mingw32