最近在xp上成功编译了webkit,查阅很多文档,发现网上的文档介绍编译方法所对应得webkit版本过于沉旧。这里介绍的源码版本是 r76498,是2011年1月24号编译的。编译过程不是复杂,只要参考http://www.webkit.org/ 其中的working code 一步一步的来。不会有太大的问题,当然还需要些补充,下面就介绍的。(也许是源码版本更新的缘故,现在的官方网址上面的编译指南还是很有效的。)
编译前的准备工作是搭建编译环境,安装工具
1.安装vs2005 team suite (我用的是英文版),接着是安装sp1, 然后依次安装四个补丁包,注意次序,KB918559 KB935225 KB943969 KB947315。
2.下载cygwin-downloader.zip。解压后,运行cygwin-downloader.exe,这会下载118文件到同级目录的release文件夹中,(若网速慢,需要一段时间的)还有些cygywin的安装程序setup.exe。下载完成后,运行setup.exe,选择 install from local directory,选中cygwin-downloader.exe所载目录,点击下一步安装完成。
3.安装quicktime sdk :http://developer.apple.com/quicktime/download/需要到注册个开发者账号后下载,缘由是苹果没有向大众开放自己的sdk。
4.安装directx ,February 2010 DirectX SDK,之前没有安装结果编译不过,所以必须安装。页面渲染加速的需要。
下面的工作是获取源码。:
1.这里我下载的源码版本是 WebKit Nightly Builds. r76498有16M大小。解压到F:/WebKitsrc下(也可以是其他目录)。
2.下载WebKit Support Libraries到F:WebKitsrc下(与webkit解压到同级目录)
3.Update source tree.打开cygwin shell,进入F:/WebKitsrc/Tools/Scripts目录下(一般是挂载到/cygdrive/f/webkitsrc/Tools/Scripts目录下)运行./update-webkit脚本。
4.运行./build-webkit -debug,编译debugwebkit库。
以上步骤进行后,发现编译通不过,此时打开F:/WebKitsrc/Source/WebKit/win/WebKit.vcproj,修改其中每个工程的属性,将c/c++编译选项中的,设置”Treat Warnings As Errors”为”No”。听说这是由quicktime sdk头文件编码问题。此步完成后,在执行第4步即可。
编译成功后,生成的核心文件有WebKit.dll,JavaScriptCore.dll,QTMovieWin.dll,InjectedBundle.dll,WebKit.exe,MiniBrowser.exe
如何调试所生成的webkit库呢?
此时我们双击运行MiniBrowser.exe,会提醒说缺少CFNetwork.dll等。
我 们下载的是苹果的webkit版本,运行需要依赖于mac平台的一些库和其他一些开源库,如 AVFoundationCF.dll,CFNetwork.dll,CoreAudioToolbox.dll,Foundation.dll,objc.dll,SQLite3.dll,zlib1.dll 等。
所 以我们需要下载win32版safari,安装完毕后,将C:/Program Files/Common Files/Apple/Apple Application Support下的所有dll文件除了WebKit.dll和JavaScriptCore.dll(这要用到我们自己编译好的库),到 F:/WebKitsrc/WebKitBuild/Debug/bin目录下。此时MiniBrowser.exe就可以运行了,我们就可以 MiniBrowser.exe为宿主程序调试webkit.dll和JavaScriptCore.dll了,了解页面的DOM树生成,排版和渲染的过 程了。当然先要掌握具体的HTML/CSS规范。
忘了说明,还需设置以下环境变量:
WEBKITLIBRARIESDIR=F:/webkitsrc/WebKit/Libraries/win这个目录是前面所提到的WebKit Support Libraries自动被解压所生成的目录。WEBKITOUTPUTDIR=F:/webkitsrc/WebKitBuild这个是编译的输出目录。
我们是用cyngwin的bash脚本,这些脚本会为每个参与编译的工程,生成一个中间的bat文件,然后调用cmd.exe,运行这个bat文件,其中调用的vs2005编译器。从工程的buildlog中,可以看到这些行为。
后记:
后来单独更新了WebKitSupportLibrary.zip,wekit编译成功但执行./run-safari --debug时,得到了如下结果:
“you copy of safari is missing important software resouces please install safari”
“无法定位程序输入点****与动态链接库*****(如icuuc40.dll)上”
仔细看了WebKitSupportLibrary.zip 中的内容都是这些关键库的头文件和lib,这说明了这些库与safari安装目录下的apple Application support库不兼容
(“C:/Program Files/Common Files/Apple/Apple Application Support”),不是太新了,就是太老了。
回复到之前成功编译时用的WebKitSupportLibrary.zip。重新编译safari就成功被启动了。
这说明大家编译成功后,应该保存当时的编译包等数据。safari更新并不能与WebKitSupportLibrary.zip保持一致。
除此之外估计全用最新的包也可能会避免这类问题。