使用CEF(一)— 起步

介绍

Chromium Embedded Framework (CEF)是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。除了提供C/C++接口外,也有其他语言的移植版。

因为基于Chromium,所以CEF支持Webkit & Chrome中实现的HTML5的特性,并且在性能上面,也比较接近Chrome。

CEF架构

Chromium架构文档

libcef_dll_wrapper

在网上,大多数所谓编译CEF的教程,实际上只是编译针对CEF源码的C++包装库:libcef_dll_wrapper,并不是真正的编译CEF。libcef动态链接库导出 C API 使得使用者不用关心CEF运行库和基础代码。libcef_dll_wrapper 工程把 C API 封装成 C++ API同时包含在客户端应用程序工程中。C/C++ API的转换层代码是由转换工具自动生成。实际上,想要编译CEF源码是一件非常麻烦的事情,你需要梯子、良好的网速以及不错的电脑。回归正题,我们开始编译libcef_dll_wrapper。

编译前准备

cmake:https://cmake.org/download/

vs2019:https://visualstudio.microsoft.com/zh-hans/vs/

CEF以及Wrapper源码:https://cef-builds.spotifycdn.com/index.html

下载libcef以及wrapper

我们首先从CDN上下载ceflib静态库以及wrapper源码:Windows64bit,标准分发(Standard Distribution)。

下载完成后,我们解压到工作目录下:

在这个目录下,会看到很多的文件夹和目录。其中主要的几个文件夹:

  • cmake:该目录下存放了配置和构建以Windows作为编译环境的cmake配置文件,具体内容可以自行查看。

  • Debug和Release:这两个文件夹中,打开会看到已经编译好的CEF核心库文件:

  • include:libcef本身提供的头文件以及wrapper会使用到的头文件。

  • libcef_dll:存放了libcef_dll_wrapper源码。

  • Resources:CEF作为内核的浏览器运行时需要用到的资源文件。

  • tests:存放了利用libcef、以及wrapper作为库来编写的浏览器Demo。其中,cefsimple编译出来的是一个简单的浏览器,而cefclient编译出来的是一个展示了cef许多API功能的exe。

使用cmake进行配置构建

打开cmake-gui.exe程序,在Where is the source code栏中选择源码所在目录,在下方的Where to build the binaries栏目中我们可以自定义任意位置,但是为了方便管理,我们选择在源码所在目录下增加一个build文件夹,所以综合来看,当前cmake-gui的配置为:

接下来我们直接点击下方的Configure按钮,cmake-gui会弹框提示没有build文件夹,会帮助你ui创建一个build文件夹,以及让你选择构建工具:

完成配置后,我们进行cmake的生成操作(Generate),并打开该解决方案:

编译libcef_dll_wrapper

上述使用cmake配置构建后,在Windows下,我们得到了一个解决方案:cef.sln。使用vs2019打开后,我们会看到解决方案中已经存在了几个工程:

  • ALL_BUILD与ZERO_CHECK:是cmake自动生成的辅助工程。
  • cef_gtest与ceftests:都是测试模块,这里不关心。
  • cefclient:一个包含CEF各种API演示的浏览器程序Demo。
  • cefsimple:一个简单的CEF浏览器程序Demo。
  • libcef_dll_wrapper:对libcef库的C++代码封装。上述cefclient与cefsimple都会用它。

我们首先完成libcef_dll_wrapper的编译,然后对cefclient以及cefsimple完成编译。

2>libcef_dll_wrapper.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\libcef_dll_wrapper\Debug\libcef_dll_wrapper.lib
========== Build: 2 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
1>   Creating library D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefsimple/Debug/cefsimple.lib and object D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefsimple/Debug/cefsimple.exp
1>cefsimple.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\tests\cefsimple\Debug\cefsimple.exe
1>Adding manifest...
========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ==========
1>   Creating library D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefclient/Debug/cefclient.lib and object D:/Projects/cef/cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64/build/tests/cefclient/Debug/cefclient.exp
1>cefclient.vcxproj -> D:\Projects\cef\cef_binary_87.1.13+g481a82a+chromium-87.0.4280.141_windows64\build\tests\cefclient\Debug\cefclient.exe
1>Adding manifest...
========== Build: 1 succeeded, 0 failed, 2 up-to-date, 0 skipped ==========

完成了编译以后,我们可以直接进入cefclient或者是cefsimple里面的输出中运行对应的浏览器程序:

注意,cefsimple.exe打开白屏是因为demo代码中默认访问的Google,cefclient.exe其实默认也访问的Google,但是因为可以输入任意的地址,所以这里不太容易发现。

cefsimple中的默认访问地址修改为国内即可(cefclient中的自行搜索):

下一节,将从零开始,使用cef来编写一个简单Demo。

使用CEF(一)— 起步的更多相关文章

  1. Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端

    距离上次提出 [Asp.Net Core] Blazor Server Side 扩展用途 - 配合CEF来制作带浏览器核心的客户端软件 的想法后, 差不多2个星期了. 这个玩意也做了一半, 自用是没 ...

  2. 使用CEF(二)— 基于VS2019编写一个简单CEF样例

    使用CEF(二)- 基于VS2019编写一个简单CEF样例 在这一节中,本人将会在Windows下使用VS2019创建一个空白的C++Windows Desktop Application项目,逐步进 ...

  3. [NodeJS] Hello World 起步教程

    概述: 做数据,免不了需要展示数据,数据可视化是必须经历的步骤. 本文将提供一个NodeJS的起步教程,是笔者这两天探索的小结. 正文:  1. 为什么使用NodeJS 究竟是以B/S还是C/S的架构 ...

  4. Node.js起步 -- (1)

    先来简单介绍nodeJS 我们知道JavaScript是运行在浏览器中的,浏览器为它提供了一个上下文(context),从而让JavaScript得以解析执行. nodeJS其实可以这么理解,它是另外 ...

  5. qt添加cef库嵌入web [转]

    qt cef嵌入web 原文http://blog.sina.com.cn/s/blog_9e59cf590102vnfc.html 最近项目需要,研究了下libcef库. Cef(Chromium ...

  6. 如何使CEF支持Flash

    方法一:复制Chrome浏览器下的pepperFlash,通过cef命令行参数设置路径. public Form1() { InitializeComponent(); InitializeChrom ...

  7. 使用C#在CEF中拦截并响应请求

    一.前言 忙里偷闲,研究了一下如何在CEF中拦截请求,并作出响应.这个功能对某些需要修改服务器响应的需求来说必不可少,可以直接读取本地文件作为响应内容. C#的CEF封装项目有很多,我使用的是Chro ...

  8. CEF中select选项错位的解决方法

    使用cef加载页面,移动窗口后选项的位置并不会变化,仍保持上次打开的位置. 经过google查找到这是一个已经解决了的问题:https://bitbucket.org/chromiumembedded ...

  9. Linux上的SQL Server的起步

    我们知道,几个星期前,微软发布了在Linux上直接运行的SQL Server第一个公开CTP版本!因此,对我来说,是时候跨界在Linux上安装我的第一个SQL安装,这样的话,我就可以在Linux上折腾 ...

随机推荐

  1. PipedInputStream and PipedOutputStream example

    必须要有PipedInputStream ,PipedOutputStream 在不同线程,不然死锁 Java.io.PipedOutputStream and java.io.PipedInputS ...

  2. 🏆【Alibaba微服务技术系列】「Dubbo3.0技术专题」回顾Dubbo2.x的技术原理和功能实现及源码分析(温故而知新)

    RPC服务 什么叫RPC? RPC[Remote Procedure Call]是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范.它允许程序调用另一个地址空间(通常是共享网络的另 ...

  3. springcloud超时重试机制的先后顺序

    https://blog.csdn.net/zzzgd_666/article/details/83314833

  4. RabitMq过期时间TTL

    第一种:给消息设置过期时间 启动一个插件 @Bean public DirectExchange DirectExchange() { return new DirectExchange(" ...

  5. Linux中MySQL的安装以及卸载

    一.MySQL MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购.而2009年,SUN又被Oracle收购.目前 MySQL被 ...

  6. K8s配置。--未完成

    配置K8s ##################################################################################### # 配置 --- ...

  7. CentOS7系统搭建FTP服务器

    创建FTP服务器1.安装FTP服务 yum install -y vsftpd 默认的FTP服务的配置文件路径为/etc/vsftpd cd /etc/vsftpd[root@test924 vsft ...

  8. elementUI+nodeJS环境搭建

    一. ElementUI简介 我们学习VUE,知道它的核心思想式组件和数据驱动,但是每一个组件都需要自己编写模板,样式,添加事件,数据等是非常麻烦的, 所以饿了吗推出了基于VUE2.0的组件库,它的名 ...

  9. Postman调试Abp API

    在swagger中查看登录需要用post方式访问,Abp需要用application/json方式调用 请求体 Postman调用方式 例:访问所有用户,调用Api地址为http://localhos ...

  10. 并发容器之ConcurrentMap

    一.concurentMap 1.数据结构,分段数组segment不扩容,里面的table扩容,每次翻倍,table中放的是entry链表的头地址: 2.初始化 segment和table的长度都是2 ...