CEF的构造说明:
https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding

chromium的源码地址:
https://chromium.googlesource.com/chromium/src.git

cef的源码地址:
https://bitbucket.org/chromiumembedded/cef/src/2357?at=2357

CEF源码中的文件CHROMIUM_BUILD_COMPATIBILITY.txt中有相应的chromium的tag(如:refs/tags/43.0.2357.130)

下载源码编译,先下载depot_tools并添加到环境变量path中。

自动下载编译:
1、mkdir code
2、cd code
3、下载depot_tools并解压到当前文件夹。
4、创建automate文件夹,将下载的automate-git.py放在其下面。
5、创建chromium文件夹,并在其下面创建update.bat,update.bat文件内容为:
python ..\automate\automate-git.py --download-dir=g:\code\chromium --depot-tools-dir=g:\code\depot_tools --branch=2357
6、在命令行执行update.bat自动下载并编译源码。
备注:bat中的选项可以有:
--download-dir 源码下载目录
--depot-tools-dir 工具包目录
--branch 源码分支(默认trunk主分支)
--checkout 指定patch版本(默认最近提交)
--no-build 下载完不自动开始编译(我们需要修改编译配置)
--no-update 确定源码下载完毕仅重新编译时使用
--force-build 强制编译(发现在有成功编译的时候再编译不会执行,可以加上这个
--no-debug-build 只编译release版本
--no-release-build 只编译debug版本
如何确定--checkout值
如果确定需要分支下的最新版本,请略过此节。
1.从http://cefbuilds.com/检查目标版本的hash值。例:3.2357.1281.gd660177中的gd660177
2.从https://bitbucket.org/chromiumembedded/cef/branches/进入目标分支。例:2357
3.在Commits中检索目标hash,注意版本号中hash为8位,commits中为7位,可以忽略第一位搜索。例:gd660177->d660177
4.点击相应commit,即可在地址栏中得到checkout值。例:d66017718b0f0d44da42b706c3c2aa5c0c103852

手工下载编译:

按照https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding文中段

Release Branch

下面的操作一步一步进行。

(注意:先下载chromium源码,再下载cef源码,cef源码务必放在chromium源码的src下面的cef文件夹里)

0、先要将windows的语言变成英语,安装vs2015 professional update3, windows sdk Win10.0.10586

1、设置环境变量
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=ninja
set GYP_MSVS_VERSION=2015
SET CEF_USE_GN=0
set CEF_ARCHIVE_FORMAT=tar.gz
set GYP_DEFINES=branding=Chromium buildtype=Official proprietary_codecs=1 ffmpeg_branding=Chrome windows_sdk_path="C:\Program Files (x86)\Windows Kits\10"

要支持播mp3必须修改chromium\src\cef\cef.gypi,下面variables增加两行。

'variables': {
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',

2、进入到chromium\src\cef目录,执行cef_create_projects.bat
3、进入到chromium\src目录,使用ninja进行编译(区别在于编译过程信息输出的位置)

ninja -C out\Debug libcef

ninja -C out\Debug libcef > d:\build.log

下面错误解决办法:打开eglext.h,在其第62行下面加入:typedef EGLAttribKHR EGLAttrib;即可。

  1. src\third_party\swiftshader\include\egl\eglext.h(119): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
  2. src\third_party\swiftshader\include\egl\eglext.h(119): error C2143: syntax error: missing ',' before '*'
  3. src\third_party\swiftshader\include\egl\eglext.h(120): error C2061: syntax error: identifier 'EGLAttrib'
  4. src\third_party\swiftshader\include\egl\eglext.h(515): error C2061: syntax error: identifier 'EGLAttrib

Release下链接错误:
ffmpeg.lib(ffmpeg.wavdec.obj) : error LNK2001: unresolved external symbol _ff_w64_guid_data
原因:https://chromium-review.googlesource.com/c/343398/4

解决办法:
第一步(不知道不改行不行,单做这一步肯定是不行)
chromium/src/third_party/ffmpeg/ffmpeg_generated.gni
chromium/src/third_party/ffmpeg/ffmpeg_generated.gypi
"libavformat/vorbiscomment.c",下面新增下面一行。
"libavformat/w64.c",
第二步 (一定要做)
chromium\src\out\Release\obj\third_party\ffmpeg\ffmpeg.ninja,按wavdec关键字搜索,
1、找到
build obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj: cc $
..\..\third_party\ffmpeg\libavformat\wavdec.c
这两行复制一份插到当前位置,并把wavdec改成w64,结果变成:
build obj\third_party\ffmpeg\libavformat\ffmpeg.w64.obj: cc $
..\..\third_party\ffmpeg\libavformat\w64.c
build obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj: cc $
..\..\third_party\ffmpeg\libavformat\wavdec.c
2、继续找到行:obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj $
这行复制一份插到当前位置,并把wavdec改成w64,结果变成:
obj\third_party\ffmpeg\libavformat\ffmpeg.w64.obj $
obj\third_party\ffmpeg\libavformat\ffmpeg.wavdec.obj $

CEF源码编译的更多相关文章

  1. CEF源码编译和生产库的使用

    CEF版本是Branch 2171 开发环境是VS2012 查看一下libcef_dll_wrapper工程属性,确定Code Generation 选择MTD(Debug) 或者MT(Release ...

  2. 【chromium】 cef源码下载

    至少需要17GB的磁盘空间,不光有CEF源码,还会下载chromium源码.编译master分支的话,如果编译到chromium可能会需要windows sdk,windows sdk的版本可以参考下 ...

  3. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  4. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  5. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  6. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

  7. World Wind .NET源码编译问题处理

    World  Wind  .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...

  8. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  9. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

随机推荐

  1. [NOI2008]奥运物流

    题目 洛谷 BZOJ 做法 单环有向图毒瘤题 不考虑环和改变后继:\(\sum\limits{i=1}^n C_i\cdot K^{dep(i)}\) 考虑环无穷等比求极m:\(R(1)=\sum\l ...

  2. PHP面向对象之对象和引用

    在PHP中对象类型和简单变量类型表现可以说是大相径庭,很多数据类型都要可以在写时进行复制,如当写代码$a=$b时,两个变量因为赋予相同的值而告终.所以需要注意的是,这种情况用在对象时就会完全不同了. ...

  3. 用代码实现断开Android手机USB连接【转】

    本文转载自:https://blog.csdn.net/phoebe_2012/article/details/47025309 用代码实现断开Android手机USB连接               ...

  4. poj 1330 【最近公共祖先问题+fa[]数组+ 节点层次搜索标记】

    题目地址:http://poj.org/problem?id=1330 Sample Input 2 16 1 14 8 5 10 16 5 9 4 6 8 4 4 10 1 13 6 15 10 1 ...

  5. RHCE学习笔记 管理1 (第三~五章)

    第三章 红帽企业linux 获取帮助 (略) man .pinfo. 第四章 编辑文件 1.输出重定向到文件和程序 >file    定向文件(覆盖) >>file   定向文件(附 ...

  6. FIND_IN_SET的简单使用

    FIND_IN_SET(str,strlist)函数 str 要查询的字符串 strlist 字段名 参数以”,”分隔 如 (1,2,6,8) 查询字段(strlist)中包含(str)的结果,返回结 ...

  7. C#遍历指定文件夹中的所有文件

    DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);//遍历文件夹foreach(DirectoryInfo NextFolder in ...

  8. js数字过大js自动变0

    解决方案: <a onclick="checkDate(${item.billday},'${item.bankcard}',${item.limitmoney/100}) 加上引号变 ...

  9. 机器学习之K-近邻(KNN)算法

    一 . K-近邻算法(KNN)概述  最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类.但是怎么可能所有测试对象都会找到 ...

  10. spring:自定义限定符注解@interface, 首选bean

    spring:自定义限定符注解@interface, 首选bean 1.首选bean 在声明bean的时候,通过将其中一个可选的bean设置为首选(primary)bean能够避免自动装配时的歧义性. ...