在Windows平台上利用微软的VS编译WebKit,然后在VS IDE里设置断点跟踪WebKit的运行,是一件很好玩的事情。到目前为止,我们至少可以通过两个开源项目来做这件事情:Apple的WebKit开源项目(http://webkit.org)和Google的Chromium开源项目(http://code.google.com/chromium)。前者我一共编译过3次,每次都要磕磕绊绊,相比而言后者的编译过程要顺利得多。

所以针对Safari的WebKit自己写个小结,希望下次再编译时能快点。

网上已经有很多先烈——先人?也不合适,还是前人吧——指明了一条最容易犯的错误:千万别自作聪明,要严格按照官方指导,从安装编译工具开始 (http://webkit.org/building/tools.html),亦步亦趋的来,不然到了出错时再反过来找错误的原因就比较头疼了。

所以还是按照官方指导的顺序来说吧。

Installing the Developer Tools 安装编译工具

- http://webkit.org/building/tools.html

1. 微软有免费(不是试用)的Visual Studio 2005 Express Edition可以下载使用,注意指导上说了新版本尚不支持。我有个朋友一开始就跳过了这一步(他用了显然是盗版的VS 2008并且还自鸣得意可以少花点时间),最后不但人崩溃了,机器也崩溃了。另外网上也有不少攻略会告诉你,VS 2008也能编译,但对于具体怎么配置似乎语焉不详,况且你不希望好不容易编译过了调试又崩溃了吧?

2. 官指(官方指导)上提到的Windows补丁,以及Service Pack,Security Update,都需要老老实实安装。安装Platform SDK时还得跳到微软的官网去看How-to,包括VS IDE的环境配置,烦人得很…这里需要注意一下,最好全都使用缺省的安装目录,否则编译时找不到这个头文件那个库文件很头疼,当然如果对VS开发环境 比较熟悉倒也不是什么大问题。

3. 关于Cygwin组件。苹果利用了Cygwin中的一些脚本和工具去调用VS来编译WebKit,理论上你完全可以直接在VS IED里打开WebKit的工程文件来编译之,前提是你曾经用VS开发过一些大型工程。在这一步常出的错误在于Cygwin中各个组件的版本。几年前第一 次编译时由于自己机器上已经安装了Cygwin,就自作聪明的跳过了这一步,导致一些莫名的编译错误。官指中的cygwin- downloader.zip其实已经指定了编译所需要的组件的最小集合,老老实实的安照要求先下载最新版本到本地然后选择本地安装即可。

4. QuickTime SDK也是必须的,谁让它是Apple的呢。我也曾自作聪明跳过了这一步,然后在安装时又自定义了目录…DirectX SDK也是必须的,Windows版本的WebKit画图时需要用到它的一些头文件和库。

5. 终于有一个不是必须的了:WinDbg和NTSD

这一部分最花时间的是Visual Studio和Windows SDK和DirectX SDK的下载,好像一共有3-4G——其实也就相当于一部半高清的电影。

Getting WebKit 下载源码

- http://webkit.org/building/checkout.html

1. 这一步问题不大,选择的余地不小。你可以

a. 在Cygwin环境下通过SVN来检出(check out)完整的代码

b. 下载这个完整包:http://nightly.webkit.org/files/WebKit-SVN-source.tar.bz2。早先的时候只 有200多M,现在急剧增长到了800M,其实代码文件基本没变化,多出来的都是些测试和bug fix相关的文件。

c. 还有一种最快捷的办法:仅下载源文件包,大概只有10几M,缺点是源文件里不带SVN信息,所以是没法进行渐进式SVN代码更新和编译的。在这 里:http://nightly.webkit.org/builds/trunk/src/1 或通过 WebKit Nightly Builds (http://nightly.webkit.org/) -> Source #View all available builds.

2. 安装WebKit Support Libraries,这是Apple预编译好的一套Windows上的动态库,包括基础/网络/图形库等,只需按照官方指导上所说的,下载后存放到 WebKit源码的根目录下,然后在Cygwin环境下运行update-webkit来下载更新最新的头文件和库文件即可。如果下一步编译时提示某个头 文件或库文件有错,可以先到WebKit Support Libraries这个目录下看看是否属于这里,如果是的话或许可以通过升级到最新版本来解决这类编译问题。

注意update-webkit这个脚本还可能会替你更新代码,如果你使用的代码里带有SVN信息的话。

Building WebKit 编译

- http://webkit.org/building/build.html

完成了以上步骤,至少半天就过去了,但很可能你才走出了第一步,因为运气不好的话,后边还会有一堆的编译错误在等着你。

如果运气足够好,只要在Cygwin环境下通过build-webkit脚本就可以得到编译结果。常见的错误包括但不限于:

1. 找不到一些头文件或库文件

- 首先通过文件名猜测或是网上搜索一下,看看这个文件大概完成什么功能,属于哪部分(例如是Windows SDK还是Apple自己提供的基础库),只要知道它应属的位置甚至目录名,就不难解决问题了:要么重新下载正确的版本,要么在VS IDE里设置正确的包含路径,或者Windows环境变量

2. 提示注册表里找不到某个key

- 可能是对应的SDK或库文件没有正确安装

3. 看不太明白的错误…  其实编译错误信息在这里: …/WebKit/WebKitBuild/buildfailed 这个文件里说明了最近一次编译错误的模块名project,然后到以下对应的文件可以查看更具体的错误: …/WebKit/WebKitBuild/obj/<project>/Debug/BuildLog.htm

5. 最后记住一点,不管出什么错,都不要怀疑代码本身;错误都是由编译环境和你自己导致的。

如果你看到以下提示,恭喜你,任务完成了。

===========================================================

WebKit is now built (56m:16s).

To run Safari with this newly-built code, use the

“WebKit/WebKitTools/Scripts/run-safari” script.

===========================================================

Running WebKit 运行

早先的时候直接执行 WebKit/WebKitTools/Scripts/debug-safari 就能启动VS IDE,后者会自动找到并启动Safari Shell,同时加载你先前编译好的各种库文件。

但在最新版本中这个命令好像仅仅启动了VS IDE,那就自己通过 WebKit\WebKitBuild\bin 目录下自己编译出来的 Safari.exe 来启动Safari吧,然后在VS IDE里attach process就可以设置断点跟踪调试了。

============================

题外话:第一次编译WebKit的时候,我受了某位WebKit开源贡献者(source contributor)的影响,认为Apple这个公司不太地道,既然都开源了为什么还很小气的设了很多人为的障碍来捣乱,要知道有多少同学冲着 WebKit的名声满腔热血的冲上来,最后被这一个又一个挫折击退了。后来自己也经历过一次WebKit开源,也写了step by step的编译步骤,才明白这个一个复杂的系统,其依赖的库和编译环境,甚至编译工具,也都是在动态变化的;最重要的是,有些内容你(包括Apple)并 不希望开源——或许这是导致编译步骤加倍复杂的根本原因——这也是我提到的那位开源贡献者对Apple WebKit开发组“不爽”之处。

2010/12/30 补记:有人问为什么要编译WebKit?我想可能因为:

1. WebKit现在颇为流行

2. 好玩

3. 学习

4. 最重要的,如果你有基于WebKit的开发或移植工作,那么在VS IDE里跟踪调试最新的WebKit代码绝对是一件事半功倍的事情

为什么基于Safari调试?因为Safari的debug模式自带了很多开发功能,包括查看每个页面元素的具体信息(例如布局和事件监听 Event Listener等),JavaScript调试等。当然,Google的Chrome也有相应的功能。严格来讲,如果你专注于WebCore引擎本身, 那么使用哪个Browser Shell其实关系不大;如果你更关注狭义上的WebKit,也就是平台相关的部分,那么Chrome可能是更好的选择,因为它完全开源。至于Qt,如果 你的工作与它完全无关,最好还是绕开它吧…

转载于:https://www.cnblogs.com/nosnowwolf/articles/2144771.html

WebKit编译小结相关推荐

  1. Windows10 + VS2015 (Win SDK10)环境下的64位 VTK编译小结

    之前在学习vtk过程中,感觉vtk的编译还是很简单的,基本上不会碰到什么棘手的错误.但是,当我在Win10+VS2015这个环境下配置时,却遇到了麻烦.经过一番折腾之后,终于将vtkbian编译成功了 ...

  2. FlightGear编译小结

    养成写Blog的习惯,把平时遇到的一些有价值的事情记录下来,这并不是每个人都能做到的.由于推免没能推到自己第一想要的方向,退而求其次,我就来到嵌入式方向,并且毕业设计也在这边的实验室做,安排的任务跟计 ...

  3. Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结

    这是官方给出的编译指导,但是在实践过程中有几点仍然需要特别注意. Tip 1:不要使用默认的"VS开发人员命令提示"工具,使用该工具会遭遇如下的错误: 正在创建库 gdal_i.l ...

  4. Android编译小结(新建android项目)

    点击打开链接 正式开始一个新的平台,以前的项目拿到的代码都是供应商改好的,感觉有很多不规范的地方. 这次从一个全新的项目着手,严格按照android规范进行项目的添加.板级文件的支持.目标是争取不改动 ...

  5. linux内核编译感想,Linux内核编译小结

    初步了解Linux编译内核: Linux默认内核存放路径为/boot Linux内核的版本号: LINUX采用双树系统:一为稳定树,二为开发树.一般是新特性及实验性改进首先在开发树中进行,经过测试后, ...

  6. catkin tools/make 编译小结

    一.catkin tools 安装  sudo apt-get install python-catkin-tools catkin build    -BuildPackages catkin cl ...

  7. Windows平台编译Webkit

    最近几天因为项目需要编译了一次Webkit,因为其中颇费周折,所以把自己的编译过程的总结分享一下,希望能给大家帮助. 参考网站http://www.webkit.org/ 1. 编译环境的搭建 (1) ...

  8. Win7+VS2010编译WebKit总结

    [转载请注明Moon出品] 编译WebKit可谓历尽千辛万苦,多亏了老师的鼓励和督促.Ashod和师姐的帮助,才能最终历经九九八十一难,成功地将WebKit编译,得道升天-现将所有有关WebKit及其 ...

  9. webkit开发学习笔记

    转载自百度文库:http://wenku.baidu.com/view/bcbcfa49e45c3b3567ec8bd3.html 某人养一猪,烦,弃之,然猪知归路,数弃无功.一日,其驾车转了很多弯弃 ...

最新文章

  1. Swin-Transformer又又又下一城 | 看SwinTrack目标跟踪领域独领风骚
  2. js ScripX插件打印
  3. 家中电脑无法共享,联通域名解析劫持竟是罪魁
  4. oracle数据库怎么导出dat文件_论将数据从数据库导出为dat格式.docx
  5. Python账号密码登陆判断(三次机会)
  6. 动态规划——最长上升子序列问题(LIS)
  7. WM下“从用户数据存储中检索信息时出错。未找到平台。”解决方案
  8. Three.js中的矩阵
  9. 机房计算机配置思维导图,运用思维导图培养高中学生信息技术学科核心素养
  10. 对称与非对称密钥加密
  11. NO3:步履蹒跚-完成第一章节学习
  12. matlab中kesi是什么意思,matlab作业简要分析
  13. 输入一个人的出生日期(包括年月日),将该生日中的年、月、日分别输出
  14. 提莫攻击 findPoisonedDuration
  15. 矩阵和矢量的点乘推导及其简单应用
  16. 如何下载沪深300历史数据
  17. Word 2013版本管理
  18. python网页登录钉钉_关于钉钉接口使用Python,Post 500报错
  19. Python大球吃小球
  20. Python爬虫鲁迅先生《经典语录》保存到Excel表格(附源码)

热门文章

  1. csv to mysql_CSV to array
  2. python能编游戏吗_python能做游戏吗
  3. ionic 之 获取验证码
  4. div 高度等与html,html – 仅限CSS – 基于兄弟的div的高度
  5. 怎样获取不同域名的ifram的html,AJAX | iframe跨域的实现方法
  6. 数据库: asc和desc的意思
  7. 当SQLServer判断不等于遇到null的时候
  8. 发送get请求php,如何利用PHP发送GET请求
  9. 无法登陆到你的账号 桌面的文件都消失_都别拦着我,我要删库了
  10. vscode怎么全局搜索_VS Code 新版本发布!支持远程开发、同步设置等新特性