编译CEF

来源:互联网 发布:sql获取seq 编辑:程序博客网 时间:2024/06/06 03:27

见:http://note.youdao.com/share/?id=279678779a920fca6f65806bb0226b05&type=note#/

下载代码:
基于国内环境,直接下载不可能,所以需要使用VPN,这里使用hosts文件的方式。
从此处下载hosts文件:https://github.com/racaljk/hosts
设置后有些代码的下载还是出错,自己修改hosts文件,指向opensource.google.com相同的地址。
通过python脚本下载代码:python automate-git.py
其中python需要python2.7.6版本。
automate-git.py从对应的cef branch中取对应版本。
下载时可以自己下载cef、chromium、depot_tools,并按下面的目录结构放好,再执行上面的更新代码命令进行版本的切换。假设下面的目录放在E盘,且automate-git.py脚本放在e:\cef2623目录下,下载的是cef的2623版本,那么命令这样写( 命令最后的部分是输出重定向,方便查日志 ):
python automate-git.py --download-dir=e:\cef2623 --branch=2623 >run.log 2>&1

构建工程:
如果上面的命名顺利执行完,且没有任何错误,那么工程已经构建完了,不需要继续往下看了。否则,就要开始痛苦的编译过程了。如果编译较早版本是肯定要经历此过程。
以下的步骤假设上面的代码已按结构下载到e:\cef2623目录下。
1、首先设置环境变量(最好将这些环境变量添加到系统环境变量中)
set WIN_CUSTOM_TOOLCHAIN=1
set GYP_MSVS_VERSION=2013
set GYP_GENERATORS=ninja,msvs-ninja
set CEF=E:\cef2623\depot_tools
set PATH=%CEF%\python276_bin\Scripts;%CEF%\python276_bin\;%CEF%;%PATH%;
SET VS90COMNTOOLS=%VS120COMNTOOLS%

解释:GYP_MSVS_VERSION表示需要的vs版本;GYP_GENERATORS设置需要生成哪类工程;VS90COMNTOOLS用于设置python使用的vs版本。
个别cef版本可能需要设置vs_root和sdk_root,分别指向vs和windows sdk安装目录。
2、下载缺失的代码
在命令行下,切换到e:\cef2623目录
执行 gclient sync --jobs 16来更新代码,确保所有代码下载完成。
执行 gclient runhooks来更新需要的第三方代码和工具。
重复执行 python automate-git.py --download-dir=e:\cef2623 --branch=2623 >run.log 2>&1 这个命令,直到更新不再出错
检测e:\cef2623\chromium\src\cef目录下是否已经生成cef.sln,如果没有生成,那么命令行下,切换到e:\cef2623\chromium\src\cef目录
执行 cef_create_projects.bat来生成sln解决方案
此时如果出错,那么根据提示进行处理,一般是缺少gyp、或者各种工具类此时打开git客户端,并切换到对应的仓库。这里skia为例,打开git shell,切换到chromium\src\third_party\skia目录下,执行 git reset --hard e2913ed9b25bf4a47194c4ca13beec0b5784842 命令将skia切换到e2913ed9b25bf4a47194c4ca13beec0b5784842版本,具体的版本号可以从chromium\src目录下的DEPS文件中查找,在文件中搜索skia.git@,找到后,后面的字符串就是要替换的版本号。所有出错的版本切换正确后,将可以生成正常的vs工程。如果还有问题,可以把某个第三方仓库clone下来,然后再reset指定版本。
3、在VS中编译项目
双击生成的cef.sln,在VS中打开,基本就可以使用了。
此时可能出现的错误如下:warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。对于此错误,打开错误的文件另存为Unicode 1200格式(文件菜单下的,高级保存选项中,编码格式选择“Unicode - 代码页 1200”),然后重新编辑即可。
编译时,缺少dll,可以从系统的sdk目录或者其他地方复制到out\debug或release目录下。
编译时,还可以一个个项目挨个进行编译,逐个解决,因为批量编译时有时顺序不对会出现问题。
4、编译cef2623过程中遇到的问题
  • 缺少d3dcompiler_47.dll,安装win8.1SDK,然后在其目录下搜索,然后复制到out\debug或release目录下。
  • gl_bindings_skia_in_process编译不过去。根据修订记录是说在2454中就把gl_bindings_skia_in_process.cc、gl_bindings_skia_in_process.h从项目排除了,但是2623同步代码后发现还是哟此文件,且导致编译错误。解决问题的方式有三种:1)把出错的地址注释掉(本人采用的此方法);2)采用vs2015编译,因为出错是代码中使用了c++11的某些关键字导致,新版VS支持此关键字(此法未测试);3)在头文件中,通过#define constexpr const语句,把关键字转换为宏定义。
  • EGLAttrib未定义错误:在"eglext.h" 第62行插入“typedef EGLAttribKHR EGLAttrib;”。