如何编译出cef2623中的cef_sandbox.lib静态库

简介: 转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/77480333之前写过一篇文章,关于编译Cef2623源码的( 在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)),已经编译出了libcef.dll。

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/77480333

之前写过一篇文章,关于编译Cef2623源码的( 在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)),已经编译出了libcef.dll。

起因

今天碰到个需求,需要在项目中让Cef支持flash播放,关于支持flash的方法见(Cef功能开发经验总结)。为了使用flash,就要使用sandbox功能,否则Cef使用过程中会有瞬间出现一个cmd弹框(这是个bug),关于这个bug的解决办法,详见:解决cef加载flash时弹出黑框的问题。而cef_sandbox.lib是个静态库,cef2623自带的cef_sandbox.lib是用VS2013编译的,而我用的是VS2015,所以没变直接链接cef_sandbox.lib,于是我很自然的想到去自己用VS2015编译一遍cef的源码。

然而编译完cef后发现,所有的相关dll和文件都编译出来了,唯独没有cef_sandbox.lib静态库!去网上查了查资料,只有一个网友遇到和我相同的问题(http://magpcss.org/ceforum/viewtopic.php?f=6&t=14202),但是没有解决办法。在\chromium\src\out\Release\obj\sandbox\sandbox.lib目录和\chromium\src\out\Release\obj\cef\cef_sandbox.lib目录中可以看到名字与sandbox相关的静态库。但是我们真正需要的静态库是200多M的文件,而这两个只有几百K,不是我需要的,所以看情况貌似cef源码编译过程中不会自动产生cef_sandbox.lib,需要自己想办法。

解决过程

于是乎我翻了翻源码中一些gyp、py等配置文件,终于在\chromium\src\cef\tools\make_distrib.py里翻到了相关信息!
这里写图片描述
可以看到这个python源码里,给sandbox_libs列表赋值了几个静态库,而且包含了前面说的那两个静态库文件。我觉得这几个静态库合起来就是真正的cef_sandbox.lib,于是直接找到这几个文件,放到项目里去编译,结果发现能用!搞到这里最起码已经解决了没有cef_sandbox.lib的问题了。

接下来顺藤摸瓜,找到了这里
这里写图片描述
调用了一个combine_libs的函数,看函数名字意思就是把多个lib文件合并起来的意思,也就是把sandbox_libs列表里指向的几个静态库合并为一个cef_sandbox.lib文件,最终根据combine_libs函数找到了combine_libs.py模块,发现他是用VC里面自带的lib.exe的功能,可以把多个静态库合并为一个得到了最终需要的cef_sandbox.lib。所以我直接使用lib.exe自己手动合并出了一个cef_sandbox.lib。至此就算是搞完了。

后记

查看相关源码,按理说cef编译完后,应该会自动合并得到cef_sandbox.lib,但是我的却没有,后来发现是因为VS的安装路径不是默认的C:\Program Files (x86)。cef编译完成后,打包时\chromium\src\cef\tools\make_distrib.py脚本的combine_libs函数调用同目录的msvs_env.bat批处理去查找VC的vcvars32.bat。而msvs_env.bat批处理通过硬编码的C:\Program Files (x86)VS路径来引用vcvars32.bat。可以直接修改msvs_env.bat让其指向自己的VS路径就可以了!

cef_sandbox的一个坑

在项目中使用cef_sandbox.lib,但是发现只要开启沙盒,所有子进程(渲染进程、flash进程)都无法启用,只有关闭了沙盒才能启动。找到半天不清楚原因。后来在cef_sandbox_win.h里看到说明:
这里写图片描述
沙盒相关功能不能在dll中使用,而是直接在exe中调用。而我项目为了模块发,恰好用了dll单独封装了cef。经过修改后在exe中使用,的确正常了!

另外在链接cef_sandbox.lib是发现,运行时库必须选择MT,使用MDMTd等选项都报运行时不匹配的错误。即使项目是Debug模式,运行时库也要选择MT。而且c++预处理宏中不能包含_DEBUG,否则也会报运行时库不匹配。

Redrain QQ:491646717 2017.8.22

目录
相关文章
|
存储 PyTorch 算法框架/工具
Tensor to img && imge to tensor (pytorch的tensor转换)
Tensor to img && imge to tensor (pytorch的tensor转换)
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
2627 3
|
5月前
|
JSON 数据挖掘 API
闲鱼商品列表API响应数据python解析
闲鱼商品列表API(Goodfish.item_list)提供标准化数据接口,支持GET请求,返回商品标题、价格、图片、卖家信息等。适用于电商比价、数据分析,支持多语言调用,附Python示例代码,便于开发者快速集成。
|
9月前
|
存储 监控 数据挖掘
消防行业如何借助时序数据库 TDengine 打造高效的数据监控与分析系统
本篇文章来自“2024,我想和 TDengine 谈谈”征文活动的优秀投稿,深入探讨了如何在消防行业中运用 TDengine 进行业务建模。文章重点介绍了如何通过 TDengine 的超级表、标签设计和高效查询功能,有效管理消防监控系统中的时序数据。作者详细阐述了实时监控、报警系统以及历史数据分析在消防行业中的应用,展示了 TDengine 在数据压缩、保留策略和分布式架构下的强大优势。
247 0
|
编译器 C++
#include<> 与#include ""的区别
在C++中,`#include &lt;&gt;` 和 `#include &quot;&quot;` 都用于包含头文件,但使用场景不同。`#include &lt;&gt;` 用于包含系统标准库头文件,编译器会在标准库路径中查找;而 `#include &quot;&quot;` 用于包含用户自定义的头文件,编译器会优先在当前项目目录中查找。
|
API 开发者
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
【API管理 APIM】APIM集成内部VNet后,自我访问出现(Unable to connect to the remote server)问题,而Remote Server正是APIM它自己
531 5
|
程序员 C++
malloc与free的内存管理奥秘:技术分享
【8月更文挑战第22天】在软件开发过程中,内存管理是一个至关重要的环节。特别是在使用C或C++这类语言时,程序员需要手动管理内存的分配与释放。malloc和free函数是这一过程中的核心工具。本文将深入探讨malloc如何分配内存,以及free如何知道释放多少内存,帮助你在工作学习中更好地掌握这一技术干货。
349 4
|
物联网 芯片 开发者
低功耗技术在智能硬件上的应用
随着芯片技术的不断发展,CPU的主频越来越高,随之而来的高功耗及发热等问题也日益显现出来,因此低功耗设计也成为了智能硬件中必须面对的重大课题。业界在低功耗的设计方面有许多优秀的实践案例,值得我们借鉴和学习,本文总结了一些经典的低功耗设计方法,同时也会详细阐述AliOS Things在IPC中采用的低功耗方案。
低功耗技术在智能硬件上的应用
|
前端开发 C++ 开发者
QML动画实战指南:打造华丽且高性能的用户界面动效
QML动画实战指南:打造华丽且高性能的用户界面动效
2004 0
|
存储 自然语言处理 API
QT基础教程(QDebug和QString)
QT基础教程(QDebug和QString)
552 0