最近开始学习webkit,第一步就是要编译webkit源码,经过一个元旦假期的努力,外加上网上各位大牛的bolg教程。今天成功编译了webkit,特地上来和大家分享下。
先说下环境:本人的系统是WIN 7 32bit,使用的是Visual Studio 2005英文版,2G内存
First step:
在你的电脑上安装Visual Studio 2005英文版(最好是team suite版),在此特别说明,请尽量使用英文版的编译器,这样可以为你日后打package省下不少事。
有几个必须要安装的补丁,首先是Microsoft® Visual Studio® 2005 Team Suite Service Pack 1如果你使用的是vista以上版本的系统的话,这个是不适用的,你可以在安装完Visual Studio 2005后,选择windows update,系统会自动帮你升级到sp1。
接下来是安装四个补丁:
这四个补丁全部选择英文版,其中KB918559和KB935225只用英文版,如果你用的是中文版的VS2005,是无法安装的。
至此,你的编译器基本上设置好了。
Second step:
你需要在在windows平台上运行Unix模拟环境,在webkit的官网上提供了cygwin下载。
在官网上下载一个cygwin-downloader.zip,随便解压在哪个盘都可以。
然后运行cygwin-downloader.exe,目前,它会下载159个软件以及setup安装程序。
其中一部分是我们要用的,给出需要安装的软件列表:"apache", "bc", "bison", "curl", "diffutils", "e2fsprogs", "emacs", "flex", "gcc", "gperf", "keychain", "make", "nano", "openssh", "patch", "perl", "perl-libwin32", "python", "rebase", "rsync", "ruby", "subversion", "unzip", "vim", "zip"
下载的软件放在解压目录下的release下,请逐一检查上述软件是否已经下载下来了,如果有缺失,则需要运行setup程序从网上下载。
当下载完成后,运行setup程序,、将上述软件进行安装,推荐使用默认目录安装,可以省去不少麻烦,如果你对环境设置非常熟练,那就随意了。
接下来,你还需要安装两个SDK,quicktime SDK和DirectX SDK。其中quicktime SDK需要注册一个apple developer的ID。
Third step:
到这里,我们可以去下载一份近期的webkit的源码了。http://nightly.webkit.org/builds/trunk/src/1
推荐只把源码下载下来,如果你使用svn进行下载的话,估计需要花费几个小时的时间。
将源码解压后,文件夹命名为WebKit,放在(C:\cygwin\home\<username>\)下。
在windows下编译webkit仍需要一些支持,下载WebKit Support Library,无需解压,脚本会帮我们搞定。
放在(C:\cygwin\home\<username>\WebKit
)下。
接下来,打开Cygwin Terminal,执行"WebKit/Tools/Scripts/update-webkit"
cygwin会为webkit下载WebKitAuxiliaryLibrary.zip支持补丁,当然这个补丁在apple的官网上也是有的。
按理说,接下来该执行build-webkit了,但是,我可以很明确的告诉你,这次build肯定是失败的。
我们还需要设置一些环境变量:
WEBKIT_DIR = %WEBKIT_DIR%
WEBKITOUTPUTDIR = %WEBKIT_DIR%\WebKitBuild
WEBKITLIBRARIESDIR = %WEBKIT_DIR%\WebKitLibraries\win
其中%WEBKIT_DIR%为你放置webkit源码的绝对路径,e.g:本人的是C:\cygwin\home\Snny\WebKit\WebKitLibraries\win设置好之后,我们有两种选择,在cygwin下执行"WebKit/Tools/Scripts/build-webkit"
另一种是打开C:\cygwin\home\<username>\WebKit\Source\WebKit\win\WebKit.vcproj里面的WebKit.sln工程,跳转到VS2005下进行编译。
选择debug或者release模式编译,因为Webkit在Windows下不止一个port,也就不止一个Debug和一个Release。
由于quicktime SDK的头文件不是unicode编码,和我们的gbk不兼容。我们需要修改webkit项目里的所有C/C++子项目里的一个属性:
Treat Warnings As Errors设置为No.如果跳过这一步,很多子项目就会因为编码警告而报错,结果就是你还是要改过来在此编译。
如果上述工作你都能准确完成的话,这个时候编译一般是不会出什么大问题的。按下F7,出去泡杯茶或者做的别的事去吧。WebKit编译过程快的话,
大概一个小时左右就能完成,如果你的机器性能不好,像我一样只有2G内存的话,那就慢慢等吧,两到三个小时之后回来验收。
编译完成后,第一次可能不会全部成功,请耐心检查错误。
另外,请谨记一点,永远不要怀疑源码,出错的原因肯定是环境设置不对或者补丁未打,绝对不是源码的问题,webkit是进行dailybuild的,代码质量是有保证的。
总结下我所碰见的问题:
1.\platform\LocalizedStrings.cpp(263): error C2001: newline in constant
2.\platform\LocalizedStrings.cpp(265): error C2001: newline in constant
这两个错误出现是由于编码问题造成的。
修改方法如下:
263行改为:
returnformatLocalizedString(WEB_UI_STRING("Look Up“%@”","Look Upcontext menu item with selectedword"), selectedCFString.get());
265行改为:
return WEB_UI_STRING("Look Up“<selection>”","Look Up contextmenu item with selectedword").replace("<selection>",truncatedStringForLookupMenuItem(selectedString));
另一种方法是打开LocalizedStrings.cpp,然后以utf-8的编码方式保存覆盖源文件。
3.platform\LocalizedStrings.cpp(263): fatal error C1057: unexpected end of file in macro expansion
.解决了上述两个问题之后,就不会出现这个无法预期的文件结尾了。
4.Project: error PRJ0002 : Error result 1 returned from 'C:\Windows\system32\cmd.exe'.
该错误为关联错误,是由各模块之间的依赖性导致。在改正了其他模块中的错误后,该错误自动消失。
由于WebCore模块的错误引发的该错误可达到15个之多。
Last step:
编译成功后,运行C:\cygwin\home\<username>\WebKit\WebKitBuild\Debug\bin文件夹下的WinLauncher程序,报错,提示缺少dll。
没办法,下个safari吧,谁让咱们用的apple的东西呢。
将safari目录下的部分dll拷贝到bin文件夹下,在此列出需要的dll文件:
WebKitQuartzCoreAdditions.dll
CFNetwork.dll
CoreFoundation.dll
CoreGraphics.dll
icudt46.dll
icuin40.dll
icuuc40.dll
libicuin.dll
libicuuc.dll
libxml2.dll
objc.dll
pthreadVC2.dll
SQLite3.dll
zlib1.dll
注意:千万不要把webkit.dll也拷过来,万一覆盖了你生成的DLL,那么以上工作都白做了~
接下来把WebKit作为VS2005的Startup Project,
attach到正在运行的safari进程上,这样,就可以使用safari作为前端来调试webkit了。
在此,感谢ZZJ童鞋的无私帮助,你会早日找到妹子的~
参考资料:
http://www.webkit.org/building/tools.html
http://niuwa.org/?p=4
http://blog.csdn.net/zzj1881/article/details/7680938