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-w64
gcc-mingwで作成したプログラムは、実行時にはmingwのライブラリを必要とする。windows PCには、mingwのライブラリはインストールされていないのが普通であるので、コンパイルしたプログラムとmingwライブラリを一緒に配布する必要がある。mingwのライブラリはmingw32-runtime-packageに含まれているので、これをカレントディレクトリにもってくる。
$ cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz .
$ gunzip mingw10.dll
windows用のプログラムを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.sh
export CC=i686-w64-mingw32-gcc
export CXX=i686-w64-mingw32-c++
export LD=i686-w64-mingw32-ld
export AR=i686-w64-mingw32-ar
export AS=i686-w64-mingw32-as
export NM=i686-w64-mingw32-nm
export STRIP=i686-w64-mingw32-strip
export RANLIB=i686-w64-mingw32-ranlib
export DLLTOOL=i686-w64-mingw32-dlltool
export OBJDUMP=i686-w64-mingw32-objdump
export RESCOMP=i686-w64-mingw32-windres
export WINDRES=i686-w64-mingw32-windres
$ source setenv4cross.sh
install 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 pthread
s
$ 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 install
Test sample
実行用のランタイムライブラリへのリンクを作るのを忘れないように。
$ cd samples
$ cd (試したいもの)
$ make
$ ln -s $SANDBOX/mingw10.dll .
(実行)
$ make clean
コンパイル方法
基本的にcross compile用にinstallしたwx-configを使えばOKです。
----Makefile---
MINGW_PREFIX=i586-mingw32msvc
CXX=$(MINGW_PREFIX)-g++
LD=$(MINGW_PREFIX)-ld
WXCONFIG=/usr/local/i586-mingw32/bin/wx-config
WXCPPFLAGS=`$(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