交叉编译:
使用mingw交叉编译firefox:
官方的编译教程在这里
https://developer.mozilla.org/en/docs/Cross_Compile_Mozilla_for_Mingw32
但它写的不全,且错误不少.
1)准备操作系统平台(WINDOWS/LINUX),我这里介绍在LINUX下的交叉编译
因为在LINUX下编译速度要快很多,并且编译工具也易于获取,这里以debian/ubuntu/fedora为例.
2)安装交叉编译工具链
编译工具python perl automake多数系统已经内置了,如果没有请自行安装.
接下来你可以自己编译最新版的gcc和binutils,但并不建议这样做.
你可以下载我编译好的
mingw32_4.8.2_cross_compiler_linux64.tar.xz
或者 debian/ubuntu 获取gcc(i686-w64-mingw32)和binutils:
aptitude install binutils-mingw-w64-i686 gcc-mingw-w64-i686 g++-mingw-w64-i686
fedora命令如下:
yum install mingw32-gcc mingw32-gcc-c++
安装完成后查看一下:
i686-w64-mingw32-g++ -v
如果一切正常,下一步你需要确认mingw64 crt库所在的位置. fedora下的位置在
/usr/i686-w64-mingw32/sys-root/mingw 目录
3)更新mingw-w64 crt
社区编译的crt库可能已经过时,在编译firefox的时候会遇到许多错误,这里要自行编译最新版的crt.
获取源码
svn co svn://svn.code.sf.net/p/mingw-w64/code/trunk mingw-w64-svn
编译头
mkdir tmp_build && cd tmp_build ../mingw-w64-svn/mingw-w64-headers/configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32/sys-root/mingw --enable-sdk=all --disable-secure-api --enable-idl make && make install && rm -rf *
编译库
../mingw-w64-svn/mingw-w64-crt/configure --host=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32/sys-root/mingw
make && make install && rm -rf *
编译widl
../mingw-w64-svn/mingw-w64-tools/widl/src/configure --target=i686-w64-mingw32 --prefix=/usr
make && make install && rm -rf *
注意,编译头文件的时候我使用了{{{ --disable-secure-api }}}参数,这意味着我禁用了微软所谓的安全api以便支持winxp系统.
还有一种方法是{{{ --enable-secure-api }}} 启用安全api, 然后在编译firefox的时候链接到msvcr100之类的高版本crt库以便支持winxp.
第一种方法需要大量修改firefox源码(补丁可以在我的git trunk里看到),第二种方法需要修改编译参数,我选择第一种方法.
4)获取firefox源码编译
hg clone http://hg.mozilla.org/mozilla-central/ ff-nightly cd ff-nightly vim .mozconfig make -f client.mk build
.mozconfig 文件以及补丁可以在Source Browse查看到.
实验性的构建版本下载
Iceweasel v29.0 Chinese (Simplified) Win32
5)链接libportable获取更多高级特性.
针对mingw编译版
我们可以启用tcmalloc库,代替jemalloc,因为我们很难实现在交叉编译的时候引入jemalloc.
6)现有的问题
mingw编译出来的firefox还存在一些问题.
known bugs:
在win7/8系统上开启硬件加速将导致firefox启动时崩溃.
关闭firefox主窗口时可能会导致某些线程崩溃。