Android WebRTC 编译注意事项
Android WebRTC 编译注意事项
说明
- 文主要适用于需要从外部C++文件调用WebRTC C++接口的场景
- 本文对应的源码基于m111分支,高版本的也可以参考
Android平台用默认参数编译Android WebRTC存在的主要问题
- RTTI 默认未开启
- C++库默认使用了webrtc内部的C++库,与外部C++库abi不兼容,由于符号不同可能会链接失败,侥幸编译通过,也会在运行时由于内存布局不一致,引发崩溃
- 默认只暴露JNI的符号,其他符号都引用不到
解决方案
RTTI开启
在编译参数加上
use_rtti=true
使用通用的C++库
在编译参数加上
use_custom_libcxx = false
加上这个参数后发现一些_Undiwnd_开头的链接失败了。 原因是WebRTC脚本里面存在bug:
在src/build/config/Android/BUILD.gn中,无差别的关闭了libunwind的链接:
而关闭这个的原因是使用webrtc定制的libc++的时候,链接了webrtc内部的libunwind:
而关闭use_custom_libcxx后,--unwindlib=none这个链接选项依然work,然而并没有去link libunwind这个库。解决方案:
- 在buildtools/third_party/libunwind中,修改BUILD.gn,将Libunwind可见性暴露给libjingle_peerconnection_so.so:
- 链接libjingle_peerconnection_so.so链接libunwind.a
暴露C++符号
- 将默认visibility改成default
- 修改android so导出配置文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)