webkit编译_dangercheng的博客-程序员秘密

技术标签: webkit  

编译webKit

Webkit已然成为当前最炙手可热的开源浏览器内核,从手机到电脑很常见的浏览器都是基于webkit内核的,研究webkeit对于一个程序员来说是件很让人振奋的事儿,然后要研究这个开源的瑰宝,首先就需要编译它,经过将近一个星期的研究,历经我也不知道有多少次的失败终于终于我还是编译成功了。下面我将我这次的编译的详细过程记录下来,在我看来是对网上的早期编译文档的一次版本更新吧

编译环境的搭建

建议搭建基本环境到webkit官网浏览英文介绍http://www.webkit.org/building/tools.html以及下载编译所需要的所有文件,我在我机器上的测试环境为:

Window7 32位旗舰版操作系统,4G内存(编译最大达到内存占用2.5G),处理器Inter(R)Core(TM) i3 CPU M370 @2.4GHz,编译版本为:WebKit-r132317,下面是环境搭建详细,建议安装全部选中默认路径以免编译错误。

1.      安装VS 2005 team suite 英文试用版下载地址如下:

http://download.microsoft.com/download/6/f/5/6f5f7a01-50bb-422d-8742-c099c8896969/En_vs_2005_vsts_180_Trial.img;

2.      安装Microsoft Visual Studio 2005 Team SuiteService Pack 1,下载地址如下:

http://www.microsoft.com/downloads/en/details.aspx?familyid=bb4a75ab-e2d4-4c96-b39d-37baf6b5b1dc&displaylang=en

3.    如果是win7的系统需要安装VisualStudio 2005 Service Pack 1 ATL Security Update

4.      安装一下的四个补丁:

a)     KB918559

b)    KB935225

c)     KB943969

d)    KB947315

5.      安装cygwin 利用官网专门提供的一个下载工具cygwin-downloader.zip.运行cygwin-downloader.exe会自动下载并在压缩包中生成一个release文件夹,下载完成后会自动启动安装程序setup.exe执行安装,然后选择本地文件也就是release文件夹,建议安装到C:\cygwin避免编译产生无可预知错误,选择文件夹的时候默认为全部default我建议更改为install

6.      http://developer.apple.com/quicktime/download/下载一个quicktime sdk,需要注册才能下载,必须安装。

7.      安装DirectX SDK下载February 2010DirectX SDK(新版本不支持vs2005)

8.      (可选安装,为了避免错误我安装了)安装windows调试工具,有些测试工程和脚本需要这些工具根据这个介绍安装instructions for installing the 32-bit version ofDebugging Tools for Windows.

获取源码

1.       对于源码的获取可以直接下载在http://nightly.webkit.org/  第三个下载项“Source”。20M左右。

2.       下载一个补丁包,WebKitSupport Libraries这个压缩包包含了Apple的几个非开源库的Windows port。下完后放在Webkit源码解压后的根目录:~/WebKit-r132317/(注意这个补丁包不要解压)

设置环境变量

1.       设置cygwin的环境变量,在path中添加C:\cygwin\bin;

2.       新建环境变量WEBKITLIBRARIESDIR其值为WebKit 源代码目录\WebKitLibraries\win

3.       新建环境变量WEBKITOUTPUTDIR其值设为你打算要存放objdll 的输出文件夹,当然这个文件夹所在的分区至少要有4G的剩余空间。

4.       说明:WEBKITOUTPUTDIR可以随便设,如果要保持和其他Build方式的一致性,那么就设置成为%WEBKIT_DIR%\output,这里%WEBKIT_DIR%Webkit文件夹的绝对路径。WEBKITLIBRARIESDIR必须设置为%WEBKIT_DIR%\Web`KitLibraries\win文件夹。

比如将WEBKIT_DIR设置为E:\project\WebKi t-r132317

WEBKITOUTPUTDIR则可以设置为%WEBKIT_DIR%\output

WEBKITLIBRARIESDIR则可以设置为%WEBKIT_DIR%\WebKitLibraries\win

运行cygwin(我源码在D,WEBKITOUTPUTDIR为源码内新建的ouput文件夹)

1.       执行以下命令

      export WEBKITLIBRARIESDIR=D:\\WebKit-r131283\\WebKitLibraries\\win

      export WEBKITOUTPUTDIR=D:\\WebKit-r131283\\output

2.       转到webkit源码的\Tools\Scripts目录(例如我的:cd D:/WebKit-r132317/Tools/Scripts

执行./update-webkit 此命令会下载WebKitAuxiliaryLibrary.zip,并安装,执行成功

失败则表示cygwin安装有问题!

3.       然后在执行./update-webkit-support-libs命令安装一个文件包也会提示成功。(此步比较重要,不执行会出现很多错误,网上很多文档都没有写)

开始编译

1.     启动vs2005 打开

D:\WebKit-r132317\Source\WebKit\win\WebKit.vcproj\WebKit.sln工程

2.     选择编译模式单纯的DebugRelease,这里我选择Debug

3.     选择DumpRenderTree,QTMovieWin, WebCore, WebKit, WinLauncher等所有项目(把c++项目的属性都设置一遍)的项目属性,左侧选择“C/C++”,将右侧的“Treat Warnings As Errors(“将警告视为错误”)设置为“No”。这个必须设置。否则编译时会报错

4.     WebKit-r132317默认的项目启动项为JavaScriptCore文件夹下的jsc工程,这回导致每次编译到此停止不前,所以又右键单击Tools文件夹下的MiniBrowserLauncher工程,选择Set as StartUp Project设为项目启动项

5.     好了,如果按照以上配置到这步就可以编译,按下F7或者点击编译图标开始编译。

6.     我的机器上经过大约一个小时的编译,出现一个错误:fatal error C1057: unexpected end of file in macro expansion原因是编码的问题,修改错误代码如下:

#if USE(CF)

    RetainPtr<CFStringRef>selectedCFString(AdoptCF,truncatedStringForLookupMenuItem(selectedString).createCFString());

 

   returnformatLocalizedString(WEB_UI_STRING("Look Up Dictionary", "LookUp context menu item with selected word"), selectedCFString.get());

 

#else

    returnWEB_UI_STRING("Look Up “<selection>”", "Look Up contextmenu item with selected word").replace("<selection>",truncatedStringForLookupMenuItem(selectedString));

 

#endif

#endif

7.     修改后再次编译,如果一切顺利的话最终会打开一个程序MiniBrowser.exe 但是无法正常运行,因为还缺少很多的dll文件,这时候需要下载Safari浏览器并安装了,然后复制其安装目录C:/Program Files/CommonFiles/Apple/Apple Application Support下的所有dll文件到编译目录D:\WebKit-r132317\output\Debug\bin下,注意:最好不要覆盖掉QTMovieWin.dllWebKit.dllJavaScriptCore.dll 这三个dll文件,然后再次编译,如果一切配置正确则编译成功运行MiniBrowser.exe 默认打开网页为webkit官网页面,输入www.baidu.com可以执行

至于调试,我也不会后续会了再发文章了。

 

可能会出现的问题

错误:fatalerror C1083: Cannot open include file: 'stdint.h': No such file or directory

解决:执行./update-webkit-support-libs命令

错误:NMAKE :fatal error U1077: 'touch' : return code '0x1'

解决:cygwin安装目录没有配置环境变量

错误:..\wtf\dtoa.cpp(1100): error C2220: warning treated as error - no 'object' file generated

解决:修改对应的dtoa.cpp文件属性->配置属性->c/c++->常规,将“警告视为错误”的选项改为“否”

错误:errorPRJ0002 : Error result 1 returned from 'C:\Windows\system32\cmd.exe'.

解决:此错误是由于依赖模块间错误造成,个模块没有错误了,此错误便消失

错误:在cygwin中执行build-webkit报错:-bash:webkit/Tools/Scripts/build-webkit: /usr/bin/perl: bad interpreter: Permissiondenied

解决:安装cygwin问题,没有安装perl包,建议使用cygwin提供的下载器下载安装时选择perlinstall

总结:下载的源码是肯定没有代码本身上的错误,唯一的也是编码造成的一个很明显的error C2220: warning treated as error - no 'object' file generated错误,相信其他的错误都是由于配置不当造成的,所以搭建编译环境时最好全部选择默认路径安装不要更改,虽然我也不喜欢把软件安装在C盘,但是没有办法,所以C盘空间要足够,今天才编译成功,接下来就是调试学习了,往此文档能早日助你完成编译!

 

时间20121030

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dangercheng/article/details/8128549

智能推荐

verilog语言RS232串口接收模块设计——串口调试工具发送数据在数码管显示_baijingdong的博客-程序员秘密

RS-232是常用的传输接口,是硬件学习的入门级接口。一、接口特性常见的9脚接口管脚分配如下图,参考链接:http://zh.wikipedia.org/wiki/RS-232 DE-9 Male (Pin Side) DE-9 Female (Pin Side) -------------

【CSS 颜色的 合法颜色值 (详细介绍)】_css 色值_Hey_Coder的博客-程序员秘密

CSS 颜色的 合法颜色值1. 颜色关键字⑴ 颜色名⑵ transparent 关键字⑶ currentColor 关键字2. 十六进制颜色 (#红绿蓝,0~f)3. RGB 颜色 (整数,百分比值)4. RGBA 颜色 (带 不透明度值 / 颜色深浅)5. HSL 颜色 (色度,饱和度,亮度 / 颜色,灰彩程度,深浅程度)6. HSLA 颜色 (带 不透明值 / 颜色深浅) 结束语 和 友情链接

Java NIO --- 网络编程相关 _kainever的博客-程序员秘密

参考:      Java NIO 系列教程   NIO 与 IO 的区别   NIO :面向缓冲区 非阻塞      IO: 面向流 阻塞           以网络编程为例,在服务端如果使用传统的IO,我们一般对每一个客户端的连接都会先得到Socket     然后new 一个新的线程来处理,而对于NIO的处理,一个线程就可以管理多个连接 .        

Linux Qt使用POSIX多线程条件变量、互斥锁(量)_cpongo9的博客-程序员秘密

今天团建,但是文章也要写。酒要喝好,文要写美,方为我辈程序员的全才之路。嘎嘎之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子。故此...

经典转载 - 缓冲区溢出的原理和实践(Phrack)_weixin_34301132的博客-程序员秘密

简 介 在过去的几个月中,被发现和利用的缓冲区溢出漏洞呈现上升趋势.例如syslog,splitvt, sendmail 8.7.5, Linux/FreeBSD mount, Xt library, at等等.本文试图解释什么是缓冲区溢出, 以及如何利用. 汇编的基础知识是必需的. 对虚拟...

随便推点

&>/dev/null表示的意思_一串脚印的博客-程序员秘密

在Linux/Unix中,一般在屏幕上面看到的信息是从stdout (standard output) 或者 stderr (standard error output) 来的。许多人会问,output 就是 output,送到屏幕上不就得了,为什麼还要分成stdout 和 stderr 呢?那是因为通常在 server 的工作环境下,几乎所有的程序都是 run 在 background 的,所以

html5 js_weixin_34355715的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

AutoGUI随记_岗小李的博客-程序员秘密

基于Python 语言;使用了AutoGUI库;使用了Anaconda软件;涉及到了打包 exe的环境搭建和程序;涉及到了AutoGUI的具体函数。

react生命周期的基本用法_ime33的博客-程序员秘密

转载于:https://www.jianshu.com/p/c9bc994933d5首先,看一下一个组件的构造import React,{ Component } from 'react';class Demo extends Component { constructor(props,context) { super(props,context) ...

velocity 学习,邮件发送模板的应用_使用velocity发送邮件模板_SanGetInstance的博客-程序员秘密

XXXX服务商店 若你看不到下面的内容,请点击此处查看详细内容 尊敬的客户${user

推荐文章

热门文章

相关标签