Soul Orbit

解决Chromium编译出现无法找到DOM和CSS相关文件的问题

原创文章,转载请标明出处:Soul Orbit
本文链接地址:解决Chromium编译出现无法找到DOM和CSS相关文件的问题

这两天重新下了个最新的Chrome的源代码,想编译一下,结果发现怎么都编译不过,在编译webcore的工程时,报了一大堆与如下类似的错误:

error C1083: Cannot open include file: ‘EventInterfaces.h’: No such file or directory
error C1083: Cannot open include file: ‘CSSValueKeywords.h’: No such file or directory

1. 问题原因

找了很久终于找到了问题的原因:

EventInterface.h和CSSValueKeywords.h这些文件本身是不存在在代码中的,而是根据对应的idl文件的描述,系统在对应的平台下动态生成的。大家可以在src/third_party/WebKit/Source下搜索到这些idl文件。

而在windows下,由于没有自带的perl环境,所以chromium会在third_party下加入cygwin的目录,并利用cygwin来执行perl和相关的脚本。

由于chromium运行cygwin的方式是将其bin目录设置到PATH环境变量中,从而运行其脚本,所以其中一些目录环境就没有配置,比如/usr/lib文件夹是对应的windows的哪个文件夹。而chromium编译时依赖的perl就在这个文件夹内。

所以总的来说,就是在现在的代码在编译的时候无法找到当前需要的perl脚本,所以就无法正常编译。

2. 解决方法

既然已经找到问题的原因了,那么问题也就很好解决了。

在src/third_party/cygwin目录下,有一个setup_mount.bat的文件,运行这个文件,他会将cygwin相关的目录配置全部导入注册表内。这样perl就可以被正常执行了,那些文件也就可以被生成出来了,这个问题就算是初步解决了。

当然这只是一个临时的解决方案,因为这个修改是无法提交回chromium的,在原来的chromium的代码中,是存在一个叫做cygwin的工程来帮我们在每次编译前都自动运行setup_mount.bat的脚本的,但是现在这个工程消失了。

所以最好的方法其实应该是修改其gyp文件,修复windows下的工程信息,然后提交回chromium,但是我暂时还没有太看懂gyp文件,不知道怎么完全还原cygwin工程的配置,所以这个想法就暂时这么搁浅了。

chromium的网站上也有一个关于这个问题的issue,不知道什么时候才能有结果。现在看来只能静待佳音了。

坚持原创技术分享,您的支持将鼓励我继续创作!