在Windows下使用VS2005编译WebKit

6 篇文章 0 订阅
3 篇文章 0 订阅

这个工作已经很多人做过了,这里说说我的经验。

基本上,按照WebKit官网的指示进行,还比较顺利。有两点原则要坚持:

  1. 按照官网的要求安装工具和补丁等,特别是cygwin,官网的cygwin-downloader.zip已经包含WebKit所需的最小工具集了;
  2. 工具均安装在默认路径(如果你的VS没有安装在默认路径,请设置VSINSTALLDIR变量来指明你的安装路径,比如在编译前运行“export VSINSTALLDIR="D:\Program Files\Microsoft Visual Studio 8”)。

需要注意的是:

一、设置环境变量:
WEBKITLIBRARIESDIR=%WEBKITROOT%\WebKitLibraries\win
WEBKITOUTPUTDIR=%WEBKITROOT%\WebKitBuild
%WEBKITROOT%根据实际情况替换为WebKit项目根路径。

二、修改工程属性

WebKit的VS2005解决方案路径为:
%WEBKITROOT%\Source\WebKit\win\WebKit.vcproj\WebKit.sln
将解决方案里的各个工程属性里的“将警告视为错误”置为“否”,解决头文件编码问题(部分头文件注释中包含代码页936即GB2312不认识的编码,产生警告)。

这里需要修改的工程比较多,而且WebKit解决方案带有多套配置,每套配置都要重新设置一遍,相当繁琐。可以直接修改%WEBKITROOT%\WebKitLibraries\win\tools\vsprops\common.vsprops,将WarnAsError="true"项改成WarnAsError="false"。或者执行下面的脚本:

#!/bin/bash

webkitroot=..
common_vsprops=WebKitLibraries/win/tools/vsprops/common.vsprops
echo setting \"warning as error\" to false...
sed -i 's/WarnAsError="true"/WarnAsError="false"/g' "${webkitroot}/${common_vsprops}"

将上面的脚本存成pre-build-webkit文件。在WebKit项目根路径建立ExternalScripts目录,将pre-build-webkit文件放在这个目录下。

执行pre-build-webkit脚本,则各个工程属性里的“将警告视为错误”全部被置为“否”。

三、重新生成.h、.cpp和.idl文件

这点很多人忽略,甚至有人在webkit-help的mailing-list里提问也得不到解答。

在WebKit项目中,部分.h、.cpp和.idl文件是由.in、.table、.json、.css等文件生成的。这部分自动生成的文件同样被传到了WebKit的svn上。目前svn上的这些文件与.in和.table等文件并不配对。
使用WebKit的nightly版本(从http://nightly.webkit.org/上下载的版本)代码编译可能不会出现问题,因为svn服务器上的这些不配对的.h文件,最后更新日期早于相应的.in和.table等文件,因此会被重新生成。
直接从svn上checkout下来的WebKit就不一样了,文件的最后更新时间不再是svn服务器上记录的时间,而是checkout时写入本地硬盘的时间,此时这些.h、.cpp和.idl文件的最后更新日期可能会晚于相应的.in和.table等文件,没有能够重新生成,与源文件不匹配。表现出来的现象是一些枚举或变量定义缺失,导致编译失败。比如下面的编译错误:

..\..\parser\Lexer.cpp(411) : error C2065: 'maxTokenLength' : undeclared identifier

就是一个叫Keywords.table的文件更新,而相应的.h和.cpp没有重新生成造成的。

使用touch命令更新.in和.table等文件的日期,使相应的.h文件重新生成。在上面提到的pre-build-webkit脚本里,添加下面的命令:

find ${webkitroot}/Source \( -name "*.in" -or -name "*.table" -or -name "*.json" -or -name "*.css" -or -name "*.y" -or -name "*.mm" \) -exec touch {} \; -exec echo touched {} \;
find ${webkitroot}/Tools \( -name "*.in" -or -name "*.table" -or -name "*.json" -or -name "*.css" -or -name "*.y" -or -name "*.mm" \) -exec touch {} \; -exec echo touched {} \;

执行pre-build-webkit脚本即可。

四、解决WebKit项目脚本格式问题

其实可能是我自己的问题?%WEBKITROOT%\WebKitLibraries\win\tools\scripts\feature-defines.sh中,每行结尾包含\r字符(也就是说,这个脚本被存成了dos风格的文本)。在上述pre-build-webkit脚本中添加下面的命令避免所有这种问题:

find ${webkitroot}/WebKitLibraries -name "*.sh" -exec dos2unix {} \;

五、解决个别文件的编码问题

%WEBKITROOT%\Source\WebCore\platform\DefaultLocalizationStrategy.cpp里引用的常量字符串(非注释)中包含非ascii字符(具体来说是个全角引号),并不是GB2312编码,在默认编码为GB2312的中文环境下编译会出现错误(在无法识别文件编码的情况下,VS2005会采用系统默认编码来理解这个文件)。用UltraEdit打开后重新保存为带签名的UTF-8格式即可编译通过。

经过以上处理,WebKit的编译应该没什么问题了。以后我再讲讲wincairo配置的WebKit所依赖的其它第三方库文件的编译过程。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是在 Windows 平台下使用 Visual Studio 2017 编译 Ghostscript 库的步骤: 1. 下载 Ghostscript 源代码 你可以在 Ghostscript 官网的下载页面 [https://www.ghostscript.com/download/gsdnld.html](https://www.ghostscript.com/download/gsdnld.html) 上下载 Ghostscript 的源代码。下载完成后,解压到本地。 2. 安装依赖库 Ghostscript 依赖以下库: - zlib - libpng - jpeglib - tiff 你可以在各自的官网上下载这些库的源代码,或者使用编译的二进制文件。 3. 配置编译环境 - 安装 Visual Studio 2017,并安装 C++ 开发环境。 - 安装 CMake。你可以从 [https://cmake.org/download/](https://cmake.org/download/) 下载最新版本的 CMake。 4. 生成 Visual Studio 工程 - 打开 CMake GUI。 - 在 "Where is the source code" 中填写 Ghostscript 源代码的路径。 - 在 "Where to build the binaries" 中填写生成的工程文件路径,例如 Ghostscript/build。 - 点击 Configure,选择 Visual Studio 版本并选择生成 64 位库。 - CMake 会提示你输入各种选项,你可以根据自己的需求进行选择。如果不确定,可以选用默认值。 - 点击 Generate,CMake 会生成 Visual Studio 工程文件。 5. 编译 Ghostscript 库 - 打开 Visual Studio,打开生成的 Ghostscript 工程文件。 - 在解决方案栏中,右键点击 ALL_BUILD 项目,选择生成。 - 编译完成后,在解决方案栏中找到 gs 工程,右键点击 INSTALL 项目,选择生成。 - 编译完成后,你可以在 Ghostscript 安装目录下找到生成的库文件。 以上就是在 Windows 平台下使用 Visual Studio 2017 编译 Ghostscript 库的步骤。希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值