如何编译出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

目录
相关文章
在某龙芯平台上编译FFMPEG报错:ERROR: xxx not found using pkg-config
在某龙芯平台上编译FFMPEG报错:ERROR: xxx not found using pkg-config
348 0
|
11月前
|
Linux
linux运行protoc出现错误 while loading shared libraries: libprotoc.so.19
linux运行protoc出现错误 while loading shared libraries: libprotoc.so.19
126 0
编译OpenJDK12:LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
编译OpenJDK12:LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
233 0
|
计算机视觉
OpenCV编译时提示错误“ Built target libprotobuf”
OpenCV编译时提示错误“ Built target libprotobuf”
635 0
|
C++ Windows API
C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法     1  LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。
4596 0
|
编译器 C++
CTK-001-编译
CTK编译 参考链接:https://blog.csdn.net/blackwoodcliff/article/details/107624047?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-5&spm=1001.2101.3001.4242
140 0
CTK-001-编译
|
安全 算法 数据安全/隐私保护
一起谈.NET技术,在VS2010项目中引用Lib静态库(以Openssl为例)
  Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。   首先下载Openssl包:(http://www.
1203 0
|
安全 算法 Windows
“.NET研究”在VS2010项目中引用Lib静态库(以Openssl为例)
  Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。   首先下载Openssl包:(http://www.
896 0
|
Web App开发 并行计算
WRF-DA代码编译与安装(二)——WRF-DA模块的编译与安装
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ESA_DSQ/article/details/69061716 上一篇已经将所有WRF-DA模块所需要的依赖库都编译安装成功。
1601 0