windows用のプログラムをlinuxで作成するコンパイラ(クロスコンパイラ)が必要。また、プログラムを一から全部作るのは非効率。そこで、gcc用に、windowsでの動作に必要な基本的な部品を集めたライブラリの一つがmingwライブラリ。このmingwを使う前提でプログラムを作成するgccがgcc-mingw。この64bitOS対応のコードを作成するのがgcc-mingw-w64。まずはこれをインストール。
$ sudo apt-get install mingw-w64 binutils-mingw-w64 gcc-mingw-w64 g++-mingw-w64gcc-mingwで作成したプログラムは、実行時にはmingwのライブラリを必要とする。windows PCには、mingwのライブラリはインストールされていないのが普通であるので、コンパイルしたプログラムとmingwライブラリを一緒に配布する必要がある。mingwのライブラリはmingw32-runtime-packageに含まれているので、これをカレントディレクトリにもってくる。
$ cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz .$ gunzip mingw10.dllwindows用のプログラムをlinuxで動作させるには、windowsの代行をするプログラムが必要
$ sudo apt-get install wine$ cat > hello.cpp#include <iostream>int main(int ac,char*av[]){ std::cout<<"hello"<<std::endl; return 0;}$ i686-w64-mingw32-g++ -static-libgcc -static-libstdc++ hello.cpp 4)環境変数をセットする
$ cat >setenv4cross.shexport CC=i686-w64-mingw32-gccexport CXX=i686-w64-mingw32-c++export LD=i686-w64-mingw32-ldexport AR=i686-w64-mingw32-arexport AS=i686-w64-mingw32-asexport NM=i686-w64-mingw32-nmexport STRIP=i686-w64-mingw32-stripexport RANLIB=i686-w64-mingw32-ranlibexport DLLTOOL=i686-w64-mingw32-dlltoolexport OBJDUMP=i686-w64-mingw32-objdumpexport RESCOMP=i686-w64-mingw32-windresexport WINDRES=i686-w64-mingw32-windres$ source setenv4cross.shinstall pthread
http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.1/
http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/pthreads-w32-2.9.0-mingw32-pre-20110507-2-src.tar.lzma/download
http://sourceforge.net/projects/mingw/files/MinGW/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/ から
$ export SANDBOX=~/src/cross$ mkdir pthread$ tar xvf pthreads-w32-2.9.0-mingw32-pre-20110507-2-src.tar.lzma --lzma$ pkgbuild -e prep$ pkgbuild -e patch$ pkgbuild -e configure$ cd pthreads
$ make CROSS=i686-w64-mingw32- clean GC-inlined -f GNUmakefile$ mkdir -p $SANDBOX/{include,lib,bin}$ cp libpthreadGC2.a $SANDBOX/lib/$ cp *.h $SANDBOX/include/$ cp pthreadGC2.dll $SANDBOX/bin/Compile and install
disable-sharedなどは好みに応じて。
$ tar xjf wxWidgets-2.8.12.tar.bz$ cd wxWidget-2.8.12$ ./configure --prefix=/usr/local/i586-mingw32 --host=i586-mingw32msvc --enable-unicode --build=`./config.guess` --disable-shared$ make$ sudo make installTest sample
実行用のランタイムライブラリへのリンクを作るのを忘れないように。
$ cd samples$ cd (試したいもの)$ make$ ln -s $SANDBOX/mingw10.dll .(実行)$ make cleanコンパイル方法
基本的にcross compile用にinstallしたwx-configを使えばOKです。
----Makefile---MINGW_PREFIX=i586-mingw32msvcCXX=$(MINGW_PREFIX)-g++LD=$(MINGW_PREFIX)-ldWXCONFIG=/usr/local/i586-mingw32/bin/wx-configWXCPPFLAGS=`$(WXCONFIG) --cppflags`WXLIBS=`$(WXCONFIG) --libs`t.exe: t.cpp $(CXX) $(WXCPPFLAGS) $(CPPFLAGS) -o t.exe t.cpp $(WXLIBS)see: http://wiki.wxwidgets.org/Install_The_Mingw_Cross-Compiler
http://clam-project.org/wiki/Devel/Windows_MinGW_cross_compile
検索キーワード:ubuntu, mingw, wine, cross complier, setup