使用Visual Studio 2010编译WebKit


UPDATED 20140118:WebKit已经支持使用VS2013来编译啦!因此,如果使用VS2010来编译最新的WebKit代码会出现问题。还没有安装VS2013,但是,感觉只需将安装VS2010的步骤更改为安装2013就可以完成编译WebKit了。另外,这里用VS2010编译WebKit所遇到的问题应该还是有帮助的。


        一直有想编译WebKit的想法,可以一直都没有具体实施。最近,终于将WebKit给编译通过了!虽然,只是编译通过,只是学习WebKit开始的一小步,但是,感觉还是很爽的!

        印象中,感觉在Windows下编译WebKit是很繁琐复杂的。但是,在这次成功编译WebKit的过程中发现,只要相关工具安装在“默认”的路径上,成功编译WebKit还是相对简单容易的。只需要按照WebKit官方网站的文档,就可以轻松编译WebKit了(当然,还是会碰到一些小问题)。

        接下来,想根据这次编译WebKit过程中所遇到问题的解决和总结,说明一下编译WebKit的步骤。

    分为以下几方面来讲述:


安装开发工具


1、操作系统

    我使用的是Windows 8操作系统。当然,如果使用Windows 7/Vista肯定也是没有问题的。

2、安装June 2010 DirectX SDK

    下载并安装June 2010 DirectX SDK

    为什么要将DirectX SDK的安装放在第一步呢?因为,DirectX SDK的安装与Visual Studio 2010 sp1有一个冲突:C++ Runtime版本冲突。为了避开这个问题,就将安装DirectX SDK放在安装Visual Studio之前。如果大家是先安装Visual Studio 2010 sp1的,在碰到DirectX SDK不能成功安装时,可以查看这篇文章:"S1023" error when you install the DirectX SDK (June 2010)(http://support.microsoft.com/kb/2728613),以解决问题。

    另外,想说明一下,在Windows 8 SDK中,已经包括了DirectX SDK。但是,因为,WebKit使用了一些最新的DirectX SDK没有包括的部分,所以,还是需要安装June 2010版本的DirectX SDK的。

3、安装Visual Studio 2010

    1)安装Visual Studio 2010Visual Studio 2010 express

    2)安装Visual Studio 2010 sp1

    需要特别说明的是,建议将VS安装在默认路径的C盘,否则,在编译WebKit时会遇到问题。当时,我就是没有将VS安装在C盘,所以,扑腾了一下。当然,这不是必须的。如果VS不是安装在C盘,可以查看“Visual Studio没有安装在默认的C盘引发的问题”部分,以解决问题。

4、安装Cygwin

    1)下载Cygwin压缩包WebKit官方帮我们整理了一个包括WebKit所需工具的Cygwin压缩包。使用这个压缩包,就只会下载安装WebKit所需要的工具集。

    2)解压并运行cygwin-downloader.exe,以下载Cygwin所需文件。

    3)下载完后,运行setup.exe,安装Cygwin

    有几点说明一下:

        a) “Choose A Download Source”,选择“Install from Local Directory”。


        b)  Select Root Install Directory”,强烈建议按照默认的“C:\Cygwin”,否则,在编译WebKit时会遇到许多问题。当时,我就是没有将Cygwin安装在默认路 径上,在编译时遇到许多的问题。当然,这不是必须的。如果Cygwin不是安装在默认路径上,可以查看“Cygwin没有安装在默认路径(C:\Cygwin)而引发的问题”部分,以解决问题。


5、安装QuikTimeQuickTime SDK

    1)下载并安装QuickTime

    2)下载并安装QuickTime SDK。留意右边的“Downloads and Tools”部分,点击该处以查找资源下载。

    需要特别说明的是,建议将QuikTime SDK安装在默认的C盘路径上,否则,在编译时会遇到问题。当然,这不是必须的。如果QuickTime SDK不是安装在默认路径上,可以查看“QuickTime SDK没有安装在默认的C盘而引发的问题”部分,以解决问题。

6、安装Windows SDK

    为了安装Debugging Tools for Windows,我直接安装了Windows 8 SDK。这个步骤不是必须的。可以等到经后需要用到Debugging Tools for Windows时,才安装。

至此,编译WebKit所需的开发工具,已安装完成了!


获取WebKit源代码

    1)下载WebKit源代码。运行cygwin终端,输入以下命令,使用svn客户端程序将WebKit源代码下载到本地(下载到用户HOME目录下的WebKit目录)。

    svn checkout https://svn.webkit.org/repository/webkit/trunk WebKit

    2)下载WebKit所需的库文件压缩包。下载完后,不需要解压,直接将其放到WebKit目录下即可。

    3)更新WebKit源代码。运行Cygwin终端,进入WebKit目录,输入以下命令,以更新WebKit源代码。注意,在编译前,必须执行这一步骤。因为,第一次运行该命令时,会下载一些编译WebKit所需要的额外的库文件。

    ./Tools/Scripts/update-webkit

至此,开发工具和源代码都已经就绪了,可以开始编译WebKit了!


编译

    可以通过两种方式编译。

  • Cygwin命令行

        打开Cygwin终端,进入WebKit目录,输入以下命令,开始编译WebKit(默认是release版本)。

        ./Tools/Scripts/build-webkit

        或

        ./Tools/Scripts/build-webkit --debug

  • Visual Studio

        使用Visual Studio 2010打开解决方案WebKit/Source/WebKit/WebKit.vcxproj/WebKit.sln。直接编译解决方案即可。 

    这两种方式应该是类似的,如果配置正确,在某种方式下编译成功,在另一种方式下也会编译成功的。


编译链接问题处理


Visual Studio没有安装在默认的C盘引发的问题

    在使用Cygwin命令行开始编译后,发现编译马上就中断了。然后,有以下的错误提示:

    根据上面的提示,似乎是由于找不到VS程序而引发的出错。我当时是将VS安装在D盘的,没有安装在默认的C盘。另外,我安装的是Visual Studio,没有安装Visual Studio Express,怎么去找VCExpress.exe呢?因此,根据错误提示,打开webkitdirs.pm文件,查看第1657行到底发生了什么。

    发现,由于programFilesPath函数的返回值,从而,错误的进入了else分支。那么,再看看programFilesPath函数。

    发现,其返回值是根据环境变量“PROGRAMFILES(X86)”等决定的。在我本机上输出环境变量“PROGRAMFILES(X86)”,发现其值为“C:\Program Files (x86)”。结合上面的setupCygwinEnv函数,可以确定就是因为programFilesPath值不对,导致了找不对VS程序,所以,最终走到了else分支!!

为了解决问题,我直接修改了上面的programFilesPath函数,将赋值的那一行直接改为:

    做了以上修改后,问题解决!

    需要注意的是,如果VS安装在默认的C盘,是不会有这个问题的。另外,如果是直接使用VS进行编译,而不是使用Cygwin命令行编译,应该也是不会有这个问题的。

Cygwin没有安装在默认路径(C:\Cygwin)而引发的问题

    如果Cygwin没有安装在C盘,而是安装在D盘(D:\Cygwin)导致碰到许多编译链接问题!绝大多数的编译问题都是这个问题引起的!问题提示类似于这样:

    在我本机上输出环境变量“SystemDrive”,发现其值为“C:”,而我的Cygwin是安装在D盘的。这样,相应命令当然是找不到的呀!

    为了解决这个问题,可以通过以下方式处理。

    1)使用Visual Studio 2010打开WebKit解决方案。

    2)通过VSProperty Manager窗口,快速的批量的修改配置(通过Property Manager,可以做到只更改一处,多处起效。例如,修改某处的配置,使得debugrelease配置都起作用!我一开始,没有使用Property Manager修改配置,因此,会出现debug编译通过,但是,release编译不通过的问题)。

        a) 通过菜单View->Other Windows->Property Manager打开Property Manager窗口。打开后,Property Manager面板显示如下:

        b) 定位到WTFGenerated项目,然后,依次展开,定位到common项。

        c) 双击common项,打开对话框。左边定位到NMake项,在右边即可看到与错误信息相关的内容了。

        d) 依次对“Build Command Line”、“Rebuild All Commond Line”和“Clean Command Line”的内容进行编辑,将两处的Cygwin的安装目录路径修正。以“Build Command Line”为例,修正前的内容为:

        修正后的内容为:

    3)通过VS,对WebKit解决方案进行对“%SystemDrive%\cygwin”的查找,并对相应之处进行替换。通过查找,发现共有19cmd文件(都是一些项目编译前处理和编译后处理命令行文件)满足条件,因此,需要对这19.cmd文件的Cygwin目录进行替换修正。

QuickTime SDK没有安装在默认的C盘而引发的问题

    如果QuickTime SDK没有安装在默认路径,会导致QTMovieWin项目编译不过。可通过下述方法解决问题。

    1) 打开Property Manager窗口,并定位到QTMovieWin项目。

    2) 在QTMovieWin项目里,定位到QTMovieWinCommon项。

    3) 双击QTMoveWinCommon项,打开对话框。修改编译配置的“Additional Include Directories”。将“$(ProgramFiles)/QuickTime SDK/includes”这一路径修正为对应QuickTime SDK安装目录下的头文件目录。

    4) 修改链接配置的“Additional Library Directories”。将“$(ProgramFiles)/QuickTime SDK\LIbraries”这一路径修正为对应QuickTime SDK安装目录下的库文件目录。

LocalizedStrings.cpp导致WebCore项目编译不过

    编译错误如下:

    对应的出错源文件为WebCore项目下platform目录下的LocalizedStrings.cpp文件:

    通过google发现,是因为上述标出来的全角双引号导致问题的。将这些全角双引号直接替换为半角双引号即可解决问题。

    另外,具体为什么会有问题呢?我猜可能与WEB_UI_STRING等宏的实现相关,这就需要进一步查看代码来定位问题了。

至此,无论通过Cygwin还是VS,都应该可以顺利编译通过了!


运行&调试

    运行Visual Studio 2010,打开WebKit解决方案,并将WinLauncher项目设置为启动项目。按下F5,即可运行&调试WebKit

至此,我们不但可以编译WebKit,还可以运行、调试WebKit了!


其他说明

    1、WebKit官方的安装开发工具文档里,提到的Cygwin DLLrelocate操作,我并没有去执行。也不太清楚什么情况下,才必须执行这个操作。我想可以以后遇到问题时,再看看是否要去执行这个操作。

    2、WebKit官方的安装开发工具文档里,提到的php的安装(这个步骤原来的文档里是没有的,不知道什么情况文档更新了这一块内容,20138月?20139月?)。我还没有安装,等以后需要时再安装吧。

    3、因为我使用的操作系统是Windows 8,所以,没有去安装WebKit官方的安装开发工具文档里提到的一些补丁。我想对于Windows 8来说是不是已经不需要的呢。

    4、WebKit官方支持的Visual Studio版本会不断的升级。以前只支持Visual Studio 2005,现在支持Visual Studio 2010。但是,肯定不会去追最新的Visual Studio版本的。如果想使用最新的Visual Studio版本(例如,Visual Studio 2012)编译最新的WebKit代码,肯定是可行的,网上也有许多类似的文章(是不是关键在于WebKit的编译脚本,可能需要进行一些修改?)。


资源下载

1、June 2010 DirectX SDK

http://www.microsoft.com/en-us/download/details.aspx?id=6812

2Cygwin压缩包 for WebKit

http://svn.webkit.org/repository/webkit/trunk/Tools/CygwinDownloader/cygwin-downloader.zip

3QuickTime

http://www.apple.com/cn/quicktime/download/

4QuickTime SDK

https://developer.apple.com/quicktime/

5Windows 8 SDK

http://msdn.microsoft.com/en-US/windows/hardware/hh852363

6WebKitSupportLibrary.zip

https://developer.apple.com/opensource/internet/webkit_sptlib_agree.html


参考

1Installing Developer Tools

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

2Getting the Code

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

3Building WebKit

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

4Running WebKit

http://www.webkit.org/building/run.html

5Debugging WebKit

http://www.webkit.org/building/debug.html

6Property Manager

http://msdn.microsoft.com/en-us/library/ms173410(v=vs.90).aspx


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值