2008年8月27日星期三

在windows上编译WebKit

通过编译WebKit,可以让我们更进一步的了解、使用WebKit,从中了解WebKit使用哪些外部库,其中包含哪些主要内容等等。初次在windows上编译WebKit,是件比较麻烦的事情,需要注意的问题比较多,再加上相关文档不是很全面。从这个角度看,WebKit的编译系统,相对Gecko的编译系统,要粗糙很多。

下面简单汇总一下自己编译WebKit的过程及所遇到的问题解决方法等

一、按照下面由WebKit.org提供的内容准备编译环境、获取源代码等
Installing the Developer Tools
Getting WebKit
Building WebKit

其中首次获取源代码后需要特别注意的是一定要安装WebKit Support Libraries及运行WebKit/WebKitTools/Scripts/update-webkit成功。

其中WebKit Support Libraries主要包括缺省编译时需要使用的外部库CoreGraphics.lib、CoreFundation.lib、CFNetwork.lib,它们对应Safari所使用的Mac风格图形库及网络库;

而通过分析update-webkit脚本,得知它主要是下载一个WebKitAuxiliaryLibrary.zip并安装到指定目录,其中包括Unicode方面的icuin.lib及icuuc.lib、xml2及xslt方面的libxml2.lib和libxslt.lib、线程相关的pthreadVC2.lib、SQLite相关的SQLite3.lib等外部开源库等;

二、按照下面由Avishkar Autar提供的一篇Blog,修改直接从VS IDE编译WebKit
Avishkar Autar's Blog-Compiling Webkit On Win32
其中详细描述了相关注意事项及相应路径的修改。

三、解决编译过程中可能出现的常见问题
1、问题描述:
vc++2005 error PRJ0002 的问题 错误的结果 1 (从“C:\WINDOWS\system32\cmd.exe”返回)

解决方法:
选中解决方案,选择属性->配置属性->清单工具->输入和输出->嵌入清单,把是改成否。

2、问题描述:
对VC 2005 error C2220:警告被视为错误-没有生成“object"

解决方法:
参考FIX:VC2005编译错误:1 error C2220: 警告被视为错误 - 没有生成“object”文件
选中解决方案,选择属性->配置属性->c/c++->常规->将警告视为错误,把是改成否。

3、问题描述:
正在创建库WebCore.lib : fatal error LNK1106: 文件无效或磁盘已满: 无法查找到 0x51F6CD51

解决方法:
参考FIX:LNK1106:: 无法查找到 0x76364 无效或磁盘已满解决此问题, 添加 /IGNOREIDL 链接选项。
在VisualStudio.NETIDE, 设置此链接器选项请按照下列步骤操作:
a. 打开 属性页 对话框对于项目。
b. 展开 链接 文件夹。
c. 单击要查看嵌入的 IDL 属性页 嵌入的 IDL 。
d. 将 忽略嵌入的 IDL 属性设置 是 。

四、总结分析
通过分析WebKit\WebKitTools\Scripts\build-webkit脚本,可知其在windows环境的编译过程主要是完成VS解决方案WebKit/win/WebKit.vcproj/WebKit.sln中的内容,其中已完成相关基本配置,这样说来其编译系统还是相对比较简单的,但由于需要使用比较多的外部库,并且没有将外部库的编译整合到WebKit的编译系统中,这样往往需要编译或下载、配置(如设置头文件、库文件的路径等)对应版本的外部库。

同时WebKit核心本身编译出来就是一个动态库,而象WinLanucher、FindSafari、DumpRenderTree等外围测试程序反而比较多,编译时也会出现一些问题,对一个初次接触的人来讲往往比较困惑。

编译成功后,可运行脚本WebKit/WebKitTools/Scripts/run-safari通过Safari来使用刚才编译的WebKit动态库,具体可参考Running WebKit

但愿大家都能轻松愉快的编译出WebKit。。。

没有评论: