分类:
2006-09-02 09:18:02
最近几天搞 wxWidgets,由于要同时编译应用程序的 Windows 版本,又懒得在虚拟机里面编译程序,于是想到用交叉编译的方式在 Linux 上编译好 Windows 版本的程序,再用 Wine 或者虚拟机来执行。试了一下,这种方法很好用,比在虚拟机里面编译程序快很多。
我的操作系统是 debian sarge,其中已经有 mingw32 编译器,只需安装:
apt-get install mingw32
这会安装好 mingw32 交叉编译系统,用 i586-mingw32msvc-gcc 即可为 Windows 编译程序。
在编译 wxWidgets 的 Windows 版本之前,需要安装 DirectX 的头文件。大概是由于版权之类的原因,在 Debian 的 mingw32 中并未包含 DirectX 的头文件,只包含了 DirectX 的库,因此需要自己安装。如果不安装,在编译 wxWidgets 的时候会有警告,并且系统不会产生 wxDisplay 这个类。安装并不复杂,只要从网络上找到相关的头文件和库文件,并解压到 /usr/i586-mingw32msvc 目录中即可。
然后就可以编译 wxWidgets 了,下载并解压源码后,用如下命令可以编译:
./configure --host=i586-mingw32msvc --target=i586-mingw32msvc --prefix=~/Workshop/mingw32 --enable-monolithic --disable-shared
make; make install-strip
make -C contrib; make -C contrib install-strip
编译完成后,进入 samples 目录,随便找一个例程 make 一下,便可产生 exe 文件了。要执行这个文件,需要 mingwm10.dll 这个文件,在 Debian 中,此文件位于 /usr/share/doc/mingw32-runtime 目录中,把它复制到当前目录,便可用 wine 执行了。如果没有问题,也可以把这个文件仍到 Wine 的 C:\Windows\system32 目录中。
下图是在 Wine 中执行程序的效果:
下图是在 win4lin 中执行程序的效果: