GNU HelloをWindows向けにクロスコンパイル
今度は既存のプログラムをWindows向けにクロスコンパイルしてみる。
お試しなので簡潔かつ完結したものとしてGNU Helloでやってみよう。
まずGNU projectのサーバからGNU Helloのソース一式が入ったアーカイブを落とす。
UbuntuにはこのDebian版のパッケージhelloがあるのでソースもapt-getで取ってこれるが、
trustyだとバージョンが2.8-4であり、オリジナル版の2.10より古いようだ。
xenial以降だと2.10のようだが、せっかくなのでGNUオリジナルのアーカイブを利用する。
取ってきたアーカイブhello-2.10.tar.gzを適当なディレクトリに放り込み、それを展開する。
$ cd works/
$ ls
hello-2.10.tar.gz
$ tar xfz hello-2.10.tar.gz
$ ls -CF
hello-2.10/ hello-2.10.tar.gz
展開したディレクトリに移動し、configureとmakeを行う。
クロスコンパイルを行うのであれば、
configureする時に--hostオプションで作成対象のプラットフォームを指定する。
32bit版Windowsならi686-w64-mingw32を指定してやればよい。
$ cd hello-2.10/
$ ls -CF
ABOUT-NLS GNUmakefile README aclocal.m4 contrib/ maint.mk
AUTHORS INSTALL README-dev build-aux/ doc/ man/
COPYING Makefile.am README-release config.in hello.1 po/
ChangeLog Makefile.in THANKS configure lib/ src/
ChangeLog.O NEWS TODO configure.ac m4/ tests/
$ ./configure --host=i686-w64-mingw32
...snip
$ ls -CF
ABOUT-NLS INSTALL README-dev config.h contrib/ man/
AUTHORS Makefile README-release config.in doc/ po/
COPYING Makefile.am THANKS config.log hello.1 src/
ChangeLog Makefile.in TODO config.status* lib/ stamp-h1
ChangeLog.O NEWS aclocal.m4 configure* m4/ tests/
GNUmakefile README build-aux/ configure.ac maint.mk
$ make
...snip
$ ls -CF
ABOUT-NLS INSTALL README-dev config.h contrib/ maint.mk
AUTHORS Makefile README-release config.in doc/ man/
COPYING Makefile.am THANKS config.log hello.1 po/
ChangeLog Makefile.in TODO config.status* hello.exe* src/
ChangeLog.O NEWS aclocal.m4 configure* lib/ stamp-h1
GNUmakefile README build-aux/ configure.ac m4/ tests/
作業途中で問題が起きなければhello.exeが出来上がっている。
出来上がったhello.exeをWindows側へ持っていき実行する。
Z:\> hello Hello, world! Z:\> hello --traditional hello, world Z:\> hello --greeting="こんにちは世界" こんにちは世界