WebKit 在 Windows 平台下编译小结
虽然WebKit 已经越来越多的被广大程序员接受,但其编译过程却非常之痛苦。下面将我编译WebKit 代码的经验与大家分享。
1) 获取WebKit 源代码
WebKit 源代码是使用Subversion 工具做管理的。因此,只要具备Subversion 客户端就可以从http://svn.webkit.org/repository/webkit/trunk 获取源代码。但是,这并不是最好的方式。在实际编译过程中通过svn拿下来的代码有可能为你带来许多的烦恼。因此,我推荐从WebKit的Nightly build 直接下载WebKit 源代码压缩包。具体地址是:http://nightly.webkit.org/builds/trunk/src/1 像WebKit 这么大的项目仍然遵循Daily Build 的原则,真是挺了不起的。
WebKit 源代码在本文写作时,版本是r52221 但我最近两天都没有将该版本的WebKit编译成功。原因是,使用Visual Studio 2005 打开项目几分钟后,Visual Studio 2005 会停止响应。我测试过r50006版,也就是5字头的第一版,就没有这个问题。版本号越大说明源代码越新,反之就越古老。
2) WebKit 编译环境的搭建
WebKit 网站有一篇文章说明了一下WebKit 在Windows 平台下的环境搭建:http://webkit.org/building/tools.html 但这篇文章写得也太过简单了。这也是WebKit 最最蹂躏人的地方。我在历经十数次失败之后,终于找到了通往目标的捷径。
硬件方面
内存最好找一台内存大于2G的计算机。 因为WebKit 项目太过庞大了,会生成数以百计的.obj 文件。在执行链接操作时,内存会需要大概1.6G内存。如果你机器安装的又是Vista 之类的吃内存操作系统,那就等着看link.exe 告诉你"Out of memory"吧。 我安装了Vista的机器的内存只有区区2G,链接了数次都没有成功,最后逼得我在安全模式下(连网卡驱动都没敢加载)编译,终于在内存峰值到达1.99G 时涉险过关,真是太刺激了,太刺激了。
硬盘当然是越大越好,因为WebKit 源代码展开后需要占用160M-190M磁盘空间,编译过程产生的中间文件需要大约4G的存储空间。外加上Cygwin Visual Studio 等占据的磁盘空间,这些还是挺大的。 最最重要的是系统盘最好预留出4G左右的空间。
其实使用多核的CPU对编译WebKit 也是有好处的,编译脚本可以同时并行的调用cl.exe 编译WebKit,大大缩短了编译时间。
软件方面
首先你需要安装Visual Studio 2005 SP1 如果是Vista 或者Window 7 需要安装 SP1 update for vista。 Visual C++ 2005 Express 也是可以编译WebKit的,但是需要单独安装 Platform SDK。 实践证明WebKit 在Platform 5.0 6.0 上都可以编译通过。
这里也会引申出一个问题,如果你的机器上已经安装了Visual Studio 2008 怎么办? 别担心,Visual Studio 2005 和Visual Studio 2008 是可以共存的,并且Visual Studio 2005 可以在Viusal Studio 2008 之后安装。但是,需要注意的是,当Visual Studio 2005 在Visual Studio 2008 之后安装后,WebKit 的perl脚本只会到 “系统盘\Program Files\Microsoft Visual Studio\” 下面去找VC 的bin文件夹(也就是cl.exe 所在文件夹)。如果你安装的VS 2005 不在系统盘,需要将VC的bin文件夹拷贝到系统盘的那个目录中去。
在安装完Visual Studio 2005 之后,需要安装另一个大块头Cygwin。Cygwin实际上是在Windows 上模拟了一个Unix 环境。 安装Cygwin最好不要直接使用Cygwin网站上给出的setup.exe 文件。而是使用WebKit.org网站上给出的cygwin-downloader 工具。 cygwin-downloader 会下载编译WebKit 所需的101 个工具(现在可能又多了几个),诸如perl、zlib、bash 等等。待下载完成后,再运行Cygwin的安装工具 Setup.exe 选择从本地目录安装。请注意!Cygwin 要安装到系统盘分区下,如C盘是系统盘,那么Cygwin就必须安装在C:\cygwin 下。安装完成后,大约会占据几百兆的空间。
下一步,仍需要安装的是QuickTime SDK。 据有人说可以不安装这个QuickTime SDK,但我发现如果不安装的话WebKit 解决方案中的QTMovie 项目一定是无法编译成功的。 QuickTime 一定要安装在 系统盘:\Program Files\QucikTime SDK\ 下面,千万别改动安装路径。
最后,在解压缩WebKit 源代码文件之后,还需要到webKit.org 站点下载 WebKitSupportLibrary.zip 文件,这个文件是一些第三方库在Windows 平台上预先编译好的版本。供WebKit 链接时使用。下载后,zip文件无需解压缩,直接放在WebKit的根目录下即可。
编译步骤
1) 设定环境变量。将WEBKITLIBRARIESDIR设定为 WebKit 源代码目录\WebKitLibraries\win 路径; 将WEBKITOUTPUTDIR 设为你打算要存放obj和dll 的输出文件夹,当然这个文件夹所在的分区至少要有4G的剩余空间。
2) 执行更新脚本。 请在桌面上运行cygwin 的命令行窗口,然后通过CD 命令(和DOS的CD命令一样) 跳转至WebKit 源代码目录\WebKitTools\Scripts 文件夹下。比如,我的WebKit 源代码放在F盘,就是 cd F:/WebKit/WebKitTools/Scripts/ 运行该目录下的 Update-WebKit 和 Update-WebKit-Support-libs 两个脚本。 很多博客上都没有提到这个步骤,实际上这个步骤是能否成功编译的关键。
3) 成功执行完上面两步后,就可以使用Visual Studio 2005 打开位于 WebKit 源代码目录\WebKit\win\WebKit.vcproj\ 目录下的 WebKit.sln 解决方案了。这个sln默认带有六个编译配置 Debug、Debug_all、Debug_Cairo、Release、Debug_Internal、Release_Cairo。用Release 编译出来的就是用苹果自己的渲染引擎的版本,和Safari 的一致。 用Release_Cairo 编译出来的是支持Cairo渲染引擎的版本,这个版本可以脱离苹果的环境单独跑,但同时也无法放到苹果的Safari 环境中运行。要想监测编译是否成功,可使用WinLauncher.exe 这个应用程序加载WebKit 进行测试。
先写到这里,以后想起什么来再补充吧。
WebKit 在 Windows 平台下编译小结的更多相关文章
- 实用图像处理入门 - 2 - Windows平台下编译openCV
标签中的部分 font-family: 华文细黑; font-size: 26px; font-weight: bold; color: #611427; margin-top:40px; } h2 ...
- DevEco Device Tool 2.1 Beta1 的Hi3861在Windows平台的编译体验
DevEco Device Tool迎来了2.1 Beta1,其中的亮点之一是:支持Hi3861开发板的源码在Windows平台编译.带着浓厚的兴趣,第一时间做了一次体验. 首先在官网下载" ...
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- [转]Windows平台下安装Hadoop
1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件 ...
- Windows平台下的内存泄漏检测
在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...
- Windows平台下源码分析工具
最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处.处理过程.理论公式来源.注意事项,自己还没有弄明白的地方.目前的想法是把每一个 ...
- Windows平台下使用pthreads开发多线程应用
pthreads简介 POSIX 1003.1-2001标准定义了编写多线程应用程序的API(应用程序编程接口),这个接口通常被称为pthreads.在常见的操作系统中,例如Unix.Linux.Ma ...
随机推荐
- HTML表格的基本操作
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- JavaScript 七种数据类型
在 JavaScript 规范中,共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined ...
- LeetCode 136. Single Number(只出现一次的数字)
LeetCode 136. Single Number(只出现一次的数字)
- hihocoder 1490 Tree Restoration
构造. 从最后一层开始往上构造.最后一层肯定都是叶子结点,距离为2的肯定是同一个父亲,确定好了父亲之后,可以确定上一层每个节点之间的距离,以及上一层每个节点到还未确定的叶子节点之间的距离. #incl ...
- Python并发编程-一个简单的多进程实例
import time from multiprocessing import Process import os def func(args,args2): #传递参数到进程 print(args, ...
- Django+Nginx+uwsgi搭建自己的博客(七)
上一篇博客中介绍了Blogs App的部分后端功能的实现,在这篇博客中,将继续为大家介绍Blogs App中前端功能的实现. 首先来看发布博客功能的前端页面.在blogs/templates/blog ...
- Spring框架 AOP面向切面编程(转)
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- 什么情况下调用doGet()和doPost()?
Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost().
- AOP的自动代理
Spring的aop机制提供两类方式实现类代理.一种是单个代理,一种是自动代理. 单个代理通过ProxyFactoryBean来实现(就如上面的配置). 自动代理:自动代理能够让切面定义来决定那个be ...
- 关联的CURD
在保存的前面必须先建立好关联.但是默认情况下还是不会自动保存,如果保存会出错. Cascade all所有关联的所有持久化都是级联到另一个对象.保存这个对象的时候关联的对象自动保存. Cascade只 ...