1 什么是cef

cef是Chromium Embedded Framework的英文缩写,是一个基于Google Chromium的开源项目。Google Chromium项目主要是为Google Chrome应用开发的,而CEF的目标则是为第三方应用提供可用的嵌入浏览器支持。CEF3不仅开源,而且跨平台,框架的开发者也在不断的更新,英文资料也较丰富,对Html5,Css3等支持也很好。

2 Windows上编译cef

2.1 下载cef

CEF Automated Builds:https://cef-builds.spotifycdn.com/index.html#windows64

在Version Filter输入自己想编译的cef版本号进行筛选,然后上面的Windows 64-bit对应64位,Windows 32-bit对应32位。

Duilib – Windows系统使用Visual Studio编译cef-StubbornHuang Blog

这里以cef 94,Windows 64-bit为例,选完之后一般有五个文件可以下载,其中:

  • Standard Distribution:标准发布包。包含include头文件、libcef_dll_wrapper源码、Debug和Release的动态库文件、cmake配置文件、cefclient和cefsimple应用程序源码
  • Minimal Distribution:最小的发布包。包含include头文件、libcef_dll_wrapper源码、Release的动态库文件、cmake配置文件
  • Sample Application:cefclient的Release可运行程序
  • Debug Symbols:Debug构建符号
  • Release Symbols:Release构建符号

如果是需要开发,可以选择Standard Distribution和Minimal Distribution下载,本文以Standard Distribution为例。

最后下载的文件为cef_binary_94.4.11+gc4d96f0+chromium-94.0.4606.81_windows64.tar.bz2

2.2 编译cef

编译cef需要安装以下工具:

  • CMake GUI
  • Visual Studio 2019

如果想使用nmake编译,可以参考:cef编译及使用-Windows上编译cef 这篇文章。

首先需要解压cef_binary_94.4.11+gc4d96f0+chromium-94.0.4606.81_windows64.tar.bz2,然后在解压缩文件夹中新建一个build文件夹。

打开CMake GUI,source文件夹选择解压根文件夹,build文件夹选择build文件夹,点击Configure按钮,选择Visual Studio 2019,x64

Duilib – Windows系统使用Visual Studio编译cef-StubbornHuang Blog

然后点击Finish按钮,等待Configure完成,然后点击Generate按钮,都显示done表示项目生成完成。然后点击Open Project按钮打开生成的Visual Studio项目。在生成的Visual Studio项目中,我们只需要生成libcef_dll_wrapper项目即可,生成的vs工程默认是Unicode字符集、MTd(MT)的,也可以根据自己的需要修改

Duilib – Windows系统使用Visual Studio编译cef-StubbornHuang Blog

编译完成之后,生成的libcef_dll_wrapper.lib位于build\libcef_dll_wrapper\Debug(或者Release)\文件夹下,在之后Duilib项目中,libcef_dll_wrapper.lib使用本次生成的,而其他依赖的lib使用解压文件夹中已有的lib。

2.3 在编译时遇到的问题

我最开始不是使用的cef 94版本,而是使用的发文时最新的cef 版本117,但是按照上述步骤在编译的时候出现了以下的报错信息

error C2061: 语法错误: 标识符“FILE_INFO_BY_HANDLE_CLASS” (编译源文件 F:\Software\cef\cef_binary_117.2.5+gda4c36a+chromium-117.0.5938.152_windows64\libcef_dll\wrapper\libcef_dll_wrapper2.cc)

这个问题我查了一下,应该是cef 117版本所需要的Windows SDK高于我电脑上的Windows上的SDK版本导致的。解决方法也比较简单:

  • (1)升级电脑上的Windows SDK
  • (2)如果不想升级Windows SDK,那么就选择低版本的cef版本编译

所以我就将cef版本从117降到了94,成功完成编译。