在升级obs-browser,需要把obs-browser-page打包进来,但在本地上跑是正常,到其他机子上运行,加载浏览器插件时就crash。分析步骤:
obs-browser 依赖于CEF,在确定了CEF已经一致的,排出了CEF 里“Chromium Embedded Framework.framework”库的问题
通过加log代码,确定了代码在CefInitialize(args, settings, app, nullptr)执行后crash(文件:obs-browser-plugin.cpp),从而确定在启动obs-browser-page时出错了。
因为obs-browser-page不依赖libobs,所以写的日志代码无法在日志文件里输出查看。原来我们打开app是双击或者open XX.app,
这个方式下代码了的printf的输出是无法查看的,从而了新的思路,通过直接在终端运行 XX.app/Contents/MacOS/xx ,此时日志包括printf输出都能看,在obs-browser-page项目中添加日志代码,确定代码int ret = CefExecuteProcess(mainArgs, mainApp.get(), NULL);执行crash,且发现crash之前有个错误提示:
[0326/161058.515684:ERROR:icu_util.cc(136)] icudtl.dat not found in bundle
[0326/161058.515762:ERROR:icu_util.cc(172)] Invalid file descriptor to ICU data received.
通过google相关的资料,大体的意思是需要设置framework_dir_path的路径,从而返回源码查看,发现这个参数是通过一个宏赋值的,CefString(&settings.framework_dir_path) = CEF_LIBRARY;(文件:obs-browser-plugin.cpp)
返回到本机上将framework_dir_path打印输出(本机可以正常运行),发现framework_dir_path的值是本地CEF的路径。
CEF_LIBRARY=/Users/XX/cef/Release/Chromium Embedded Framework.framework
为了再次确定这个问题,我在其他机子上构建的这个目录,然后程序能正常的加载浏览器插件并显示。
找了问题的原因,接下来就可以修改这个framework_dir_path变量值,指定到我们包里的Chromium Embedded Framework.framework的路径,即可完成打包