在chromium源码的编译的过程中,如果编译的是完整的chrome浏览器那么总共需要编译两万多个对象。在这两万多个对象的编译过程中如果不出几个错误,那么你真的不好意思出去说你曾经编译过chromium源代码。本文总结了我在编译源代码的过程中遇到的问题:
编译环境工具
- chromium 51.xxx版本
- visual studio 2015 旗舰版
- windows7 64bit企业版
- windows kits 10
- 硬件:8G内存,i5CPU处理器
这里强烈建议大家用vs的旗舰版编译源代码,当然社区办的也是可以的。但是社区办的vs没有architecture这个导航条目、不能再调试的时候显示代码图,这两个东西都能够很好的帮助大家分析源代码。
编译过程中遇到的问题与解决的办法
下面逐条的说一下我在编译chromium源代码时遇到的问题,以及相应问题的解决办法。
第一个出现的问题
问题:
在编译的时候出现最早的问题就是ACTION Copying D3D Compiler DLL...,整个编译的过程在这个地方终止了。
解决方法:
从系统的Windows Kits目录下或者visual studio的安装目录下将d3dcomplier_47.dll 这个文件复制到编译输出目录out\Debug下,删除out\Debug下的其他的文件重新编译就能够解决这个问题。
第二个出现的问题
问题:
这个错误是The directory is not empty:'c:\\users\\hgu\\appdata\\local\\temp\\tmpc9pnev\\org\\chromium\\mojom',然后就终止编译过程
解决办法:
直接删除tmpc9pnev这个文件夹以及文件夹中的所有的文件,问题就能够解决。然后还是清理一下Debug目录,重新开始编译。注意d3dcomplier_47.dll 这个文件要保留。
第三个问题的出现
问题:
出现的问题是找不到uiviewsettinginterop.h这个头文件,这个文件肯定是系统的文件,不可能是chromium源代码提供的,但是我在整个系统中都没有找到这个文件。
解决办法:
导致找不到这个头文件的原因是因为我的Windows SDK用的是Windows kits 8.1,这个版本的SDK中根本没有这个头文件。所以这里索性直接升级,把Windows SDK升级到了Windows kits 10,然后把我原来的visual studio 2013升级到了visual studio 2015,然后再次编译问题就解决了。
第四个问题的出现
问题:
在编译的过程中出现了字符的问题,提示常亮中有换行符,然后停止编译。
解决办法:
在出现这个错误的时候,控制台会提示到底哪个文件出现了字符的问题,那么就直接把问题解决的方法定位到这个文件中。
首先,我猜测出现字符的原意是因为Windows和Unix的行结束符不同造成的,然后我就用unix2dos进行了转换,重新编译。但是问题没有解决。
然后,在google上开到一片帖子,文中说是因为vs的原因:vs能够编译的代码文本如果是utf-8的编码,一定要带有BOM,否则就会出现这个问题。于是简单的使用sublime转换一下,使出问题的那个文件的编码格式为utf-8 with BOM。再次重新编译,发现还是有问题。
最后,但是再次出的问题是ninja把警告信息直接按照错误信息处理,停止了编译。
所以这里有两个方法解决这个问题:
1. 在出问题的源代码的开头加上一句话,忽略这个警告pragma warning (disable : id_num),重新编译。
2. 修改src\build\common.gypi这个文件,把警告的id_num加入到其中。具体的加入方法参见chromium源码下载并编译。
这里就先简单的说一下我编译过程中遇到的这四个问题,其它的回想不起来了。
content_shell 版本的代码编译
为了方便查看生成后的文件,可以吧content_shell解决方案单独设置成一个目录src\out_content_shell。
构建工程的方法:
在src的目录下执行下面的命令:
python build\gyp_chromium -Goutput_dir=out_content_shell通过这个命令就能够完成工程的构建,并在src的目录下面生成out_content_shell目录。
然后在利用命令编译这个工程就可以了。
ninja -C out_content_shell\Debug content >log.txt这里要把输出的信息重定向到一个日志文件,不然出错了不方便查看,因为windows控制台不能滚动翻屏。