从源码编译cef-chromium的正确步骤

本文详细记录了从下载源码到解决编译过程中遇到的各种问题,最终成功编译cef-chromium项目的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前编译过cef-chromium的源码,但是找不到之前的源码工程了。幸好压缩源码还存在电脑里。

现在又要编译一下,因为需要定制自己需要的功能,这里就把编译过程记录一下,以免以后还会遇到,也分享给需要的读者。

下载cef-chromium的源码需要到google网站去,但这个网站被国家封了,所幸我通过其它渠道下载了全部源码。

打包的源码在这里下载:

链接:http://pan.baidu.com/s/1pLqAeD1 密码:0b62

我将源码解压到了E盘cef-chromium目录下,路径为:E:\cef-chromium

里面有cef、chromium、depot_tools3个目录。

我的机器是Win7 64位的系统,安装了VS2013和DirectX SDK。

打开VS2013命令行工具,进入路径E:\cef-chromium\chromium\src\cef,然后输入cef_create_projects.bat按回车,

提示python.bat不是内部或外部命令。

这里是编译依赖工具环境没有配上,在控制台界面输入:

set PATH=E:\cef-chromium\depot_tools;%PATH%

然后再次输入cef_create_projects.bat,就可以生成VS2013的工程了。



但是我不会用VS2013打开进行编译,为什么?因为打开VS2013进行编译,VS2013也是调用ninja进行编译,无法观察到具体的编译细节和进度,就算编译

出现错误了也不会停止,所以最好在命令行下通过ninja进行编译。

切换到VS2013命令行,然后进入目录:

cd E:\cef-chromium\chromium\src\out\Release

然后输入:

ninja

接着就开始编译了。

编译过了一会出现了一个错误:



error:C2220 警告被视为错误。这个是警告等级在捣鬼,需要把工程里的编译警告等级降低!

工程文件很多,需要批量替换,替换工具没有限制,我用QtCreator进行批量替换。

需要把E:\cef-chromium\chromium\src目录下的所有.ninja文件里的/WX换成/W3,这样警告才不会被当做错误处理。


直接替换了去。然后控制台下输入ninja,继续编译。

接来下又会出现编译错误停止,这就是第二个坑了:

[6/9584] ACTION Copying D3D Compiler DLL...
FAILED: E:\cef-chromium\depot_tools\python276_bin\python.exe gyp-win-tool action-wrapper environment
.x86 copy_compiler_dll_target_copy_dll_d5e7737f8056aa69e632ead4d36d2ac1..rsp ..\..\third_party\angle
\src

ACTION Copying D3D Compiler DLL
说明这是个拷贝动作出现错误,进入目录:

cd E:\cef-chromium\chromium\src\third_party\angle\src

发现有个copy_compiler_dll.bat,编辑打开此文件,发现有一个拷贝d3dcompiler_46.dll的命令,

直接把这个命令删除即可,于是copy_compiler_dll.bat的内容变成了这样:

@echo off
set _arch=%1
set _arch=%_arch:Win32=x86%
改然后切换到命令行,输入ninja,继续编译。

接下来就是漫长的编译过程,根据CPU性能来决定编译时间,通常需要2~6小时。

到最后快编译完成时,又出现了一个错误,编译停止了,这是最后一个坑:

e:\cef-chromium\chromium\src\cef\libcef\browser\chrome_scheme_handler.cc(262) : error C2065: “None
”: 未声明的标识符


出问题的是这一句:

parser.Add("CEF",base::StringPrintf("%d.%d.%d",CEF_VERSION_MAJOR,CHROME_VERSION_BUILD,CEF_REVISION));

这其实是

CEF_REVISION被定义成了None造成的

打开E:\cef-chromium\chromium\src\cef\include\cef_version.h

可看到

#define CEF_REVISION None
而这个None却未被定义。

因此,直接改成

#define CEF_REVISION 1930
然后保存。切换到控制台,输入ninja继续编译。
最后的链接需要花不少时间,最终还是编译成功了。

有图为证,看一下编译结果吧:



VS2013命令行需要设置的变量:
set DXSDK_DIR=C:\Program Files (x86)\Microsoft DirectX SDK (August 2006)
set GYP_GENERATORS=ninja,msvs-ninja
set GYP_MSVS_VERSION=2013
set PATH=K:\cef-chromium\depot_tools;D:\vc2013\bin;D:\vc2013\sdk\Perl516\bin;D:\vc2013\PlatformSDK_8.1\bin\x86;D:\vc2013\sdk\Python278;D:\vc2013\sdk\Python278\DLLs;D:\vc2013\sdk\gles\bin;D:\vc2013\sdk\icu\bin;D:\vc2013\sdk\ruby\bin;D:\vc2013\sdk\tbb\bin;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\git\bin;D:\DirectXSDK2010\Utilities\bin\x86;D:\vc2013\sdk\cmake\bin;D:\vc2013\sdk\gyp;D:\cef_binary_3.2272.2077_windows32\Release;D:\vc2013\sdk\duilib\bin;D:\vc2013\sdk\irrlicht\bin;D:\vc2013\sdk\cef-normal;%PATH%


set INCLUDE=D:\vc2013\sdk\angle\include;D:\vc2013\include;D:\vc2013\PlatformSDK_8.1\Include\um;D:\vc2013\include;D:\vc2013\PlatformSDK_8.1\Include\shared;D:\vc2013\sdk\openvg\include;D:\vc2013\sdk\opengl\include;D:\vc2013\sdk\ruby\include;D:\vc2013\sdk\Python278\include;D:\vc2013\sdk\mysql\include;D:\vc2013\sdk\icu\include;D:\vc2013\sdk\atlmfc\include;D:\vc2013\sdk\WMDM\inc;D:\vc2013\sdk\tbb\include;D:\DirectXSDK2010\Include;D:\vc2013\PlatformSDK_8.1\Include\winrt;D:\cef_binary_3.2272.2077_windows32\include;D:\cef_binary_3.2272.2077_windows32;D:\vc2013\sdk\duilib\include;D:\vc2013\sdk\irrlicht\include;D:\vc2013\sdk\cef-normal\inc


set LIB=D:\vc2013\lib;D:\vc2013\sdk\dx11\lib;D:\vc2013\PlatformSDK_8.1\Lib\winv6.3\um\x86;D:\vc2013\sdk\gnuwin32\lib;D:\vc2013\sdk\opengl\lib;D:\vc2013\sdk\tbb\lib\ia32\vc10;D:\vc2013\sdk\ruby\lib;D:\vc2013\atl\lib;D:\vc2013\sdk\Python278\libs;D:\vc2013\sdk\gles\lib;D:\vc2013\sdk\mysql\lib;D:\vc2013\sdk\icu\lib;D:\vc2013\sdk\angle\lib;D:\vc2013\sdk\atlmfc\lib;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\tbb\lib;D:\vc2013\sdk\WMDM\lib;D:\vc2013\sdk\git\lib;D:\DirectXSDK2010\Lib\x86;D:\cef_binary_3.2272.2077_windows32\Release;D:\vc2013\sdk\duilib\Lib;D:\vc2013\sdk\irrlicht\lib;D:\vc2013\sdk\cef-normal\lib


<think>好的,我现在需要帮助用户到在Win32平台上编译CEF二进制文件的指南。首先,用户提到了CEF,也就是Chromium Embedded Framework,我之前在引用[4]中看到过关于CEF3开发环境搭建的内容,可能相关。用户需要的是编译CEF步骤,而引用[4]主要讲的是环境搭建和清单文件的处理,但可能不够详细。 接下来,我需要回忆CEF编译流程。通常,CEF编译需要先获取源代码,然后配置构建环境,使用工具如CMake或Ninja。可能需要参考官方文档,但用户提供的引用中没有直接提到编译步骤。不过,引用[2]提到了使用--target标志来指定目标架构,这在编译时可能有帮助,尤其是针对32位或64位系统。 用户的问题是关于Win32平台的,所以需要明确是32位还是64位。根据引用[2],使用--target可以指定目标架构,比如i686-pc-windows-msvc对应32位。因此,在编译CEF时可能需要类似的参数。 另外,引用[1]提到了使用CMake进行项目构建,存放编译生成的文件和工具链配置。这可能意味着用户需要配置CMake来生成CEF的构建文件,可能需要工具链文件或特定的编译选项。 引用[4]中的步骤包括拷贝清单文件,这可能是在构建后的步骤中需要的,但编译过程本身可能需要更多的配置。用户需要获取CEF的源代码,可能从官方网站下载,然后按照官方指南进行构建。 总结步骤可能包括: 1. 下载CEF源代码和必要的工具(如depot_tools)。 2. 配置环境变量,设置正确的工具链。 3. 生成构建文件,比如使用GYP或GN(Chromium的构建系统)。 4. 使用Ninja或MSBuild进行编译。 5. 处理依赖项和清单文件,如引用[4]提到的。 可能需要指导用户查阅CEF官方文档,或者参考社区教程,如引用[3]中的C++调试系列文章可能有相关经验分享,但不确定。此外,用户可能需要处理依赖库和路径设置,确保编译工具正确识别Win32目标。 还需要注意CEF版本和Chromium版本的对应关系,以及可能的依赖安装,如Windows SDK、Visual Studio版本是否符合要求。如果用户遇到问题,可能需要建议查看错误日志或社区支持论坛。</think>### 如何在Win32平台编译CEF二进制文件 以下是基于实践和参考资料整理的CEF编译指南,涵盖从环境准备到构建的关键步骤: #### **1. 环境准备** - **操作系统**: Windows 10/11(64位系统可编译32位和64位CEF- **必要工具**: - Visual Studio 2019或更高版本(需安装C++桌面开发组件)[^3] - Windows 10 SDK - Python 2.7.x(Chromium构建工具依赖) - Git和Depot Tools(CEF源码管理工具) #### **2. 获取CEF源代码** ```bash # 下载Depot Tools并配置环境变量 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git set PATH=%PATH%;<depot_tools目录路径> # 下载CEF源码 mkdir cef && cd cef cef automation configure --branch=XXXX --force # 指定CEF版本分支 ``` #### **3. 生成构建配置** - 使用CMake生成项目文件,参考引用[1]中的CMake目录结构: ```bash mkdir build && cd build cmake -G "Visual Studio 16 2019" -A Win32 .. # -A Win32指定32位目标[^2] ``` #### **4. 编译CEF二进制文件** - 使用Ninja或Visual Studio编译: ```bash ninja -C out/Release_GN_x86 cef # Release模式32位编译 ``` 或通过Visual Studio打开生成的`.sln`文件手动构建。 #### **5. 处理依赖与清单文件** - 编译完成后,将CEF的运行时清单文件(如`demo.exe.manifest`)复制到输出目录,确保兼容性[^4]。 #### **6. 验证构建结果** - 检查`out/Release_GN_x86`目录下的`libcef.dll`、`chrome_elf.dll`等文件是否生成。 - 运行`cefsimple`示例程序测试功能。 --- ### **相关问题** 1. **如何解决CEF编译时的依赖缺失错误?** - 需通过`depot_tools`运行`gclient sync`同步Chromium依赖库[^1]。 2. **如何为CEF启用沙箱(Sandbox)功能?** - 编译时需添加`use_sandbox=true`参数,并确保已安装Windows SDK的调试符号。 3. **如何减少CEF二进制文件的体积?** - 使用`is_official_build=true`启用官方优化配置,或通过`symbol_level=0`禁用调试符号[^3]。 4. **如何交叉编译支持ARM架构的CEF?** - 需调整CMake的`-A`参数(如`-A ARM`)并安装对应架构的工具链[^2]。 --- ### **引用说明** : 关于CMake构建目录和工具链配置的细节,参考项目结构说明。 : 目标架构编译参数借鉴了Tauri CLI的`--target`标志逻辑。 : 编译环境要求参考了C++调试系列中的开发环境配置建议。 : 清单文件处理步骤基于CEF3开发环境搭建经验。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值