编译概述
当使用某种操作系统(windows、linux或Mac os X)时,我们不仅可以编译可在该系统运行的程序,也可以编译运行去其他平台的程序(如在linux系统上编译运行于windows、iOS、Android等系统的程序),后者就是所谓的交叉编译(cross-compile)技术。
一般来说,编译一个程序首先需要提供如下三类资源
1). 编译器
2). 目标程序依赖的库或头文件
3). 目标程序源码
目前最广泛使用的编译器就算gcc了,gcc是一个支持多种目标系统的跨平台编译器家族,包含一组编译器。可编译windows程序的gcc被称为MingW。
在ubuntu上交叉编译windows版qemu
1.安装编译器
ubuntu官方仓库虽然提供了mingw32等软件包但是却没有提供重要的软件包如mingw32-zlib,根据参考文献[2],编译qemu还需要诸如mingw版的zlib、glib2等,而ubuntu官方仓库里没有提供相应软件包,不过幸运的是在ppa上找到了第三方提供的mingw相关软件包,见参考文献[3]。命令如下。
sudo add-apt-repository ppa:brcha/mingw
sudo apt-get update
sudo apt-get install dh-mingw-w64 gcc-mingw-w64 g++-mingw-w64 g++-mingw-w64-i686 g++-mingw-w64-x86-64 gcc-mingw-w64-i686 gcc-mingw-w64-x86-64 binutils-mingw-w64-i686 binutils-mingw-w64-x86-64 mingw32-pkg-config
2. 安装依赖库
sudo apt-get install mingw32-zlib mingw32-glib2
3. 获取qemu源代码
git clone [email protected]:qemu/qemu.git (如果没有注册github,则可以使用git clone https://github.com/qemu/qemu.git 命令下载代码)
cd qemu
git submodule update --init pixman
git submodule update --init dtc
4. 编译
./configure --cross-prefix=i686-w64-mingw32-
make -j10
不出意外的话,很快就能编译完成。可执行find . -name "*.exe"查找所有编译出来的qemu可执行程序。将编译出来的qemu-system-arm.exe拷贝到windows系统上运行会弹出对话框提示缺少某dll文件,可以从find /usr/ -name "*.dll" 查找dll文件,将依赖的所有dll文件复制到qemu-system-arm.exe相同目录下后,qemu就可以运行了。
参考:
[1] http://wiki.qemu.org/Hosts/W32
[2] http://lists.gnu.org/archive/html/qemu-discuss/2014-10/msg00031.html
[3] https://launchpad.net/~brcha/+archive/ubuntu/mingw