如何将 webrtc 原生 api 添加到我的 qt 项目中?
Posted
技术标签:
【中文标题】如何将 webrtc 原生 api 添加到我的 qt 项目中?【英文标题】:How to add webrtc native apis into my qt project? 【发布时间】:2018-06-04 08:26:26 【问题描述】:困扰了几天,真的需要一些webrtc的导出来帮帮我。
我用ninja的源代码编译成功,可以运行peerconnection例子。我将静态库(.a文件)一一添加到我的qt项目中,然后将包含路径设置为源代码目录。当我调用 createpeerconnectionfactory 时,它编译成功。但是,当我尝试新建 PeerConnectionInterface::RTCConfiguration 对象时,会发生错误:
linux/webrtc/src/api/array_view.h:156: 错误: 未定义引用rtc::FatalMessage::FatalMessage(char const*, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)'
linux/webrtc/src/api/array_view.h:158: error: more undefined references to
rtc::FatalMessage::FatalMessage(char const*, int, std::__cxx11::basic_string, std::分配器 >*)' 跟随
我搜索了头文件,发现函数在 rtc_base/checks.h 中声明 我去阅读 BUILD.GN 并发现“检查”已构建到 librtc_base_genetic.a 中。我很确定我已将此库添加到我的 qt .pro 文件中。
我正在使用 ubuntu18,QT5.10.1,我在 5 月 19 日获得了源代码。 如果您能给我任何建议,我将不胜感激,也许这是如何发生的,或者我该如何解决这个问题。
有没有人导入过webrtc原生库并成功使用api的?我真的需要有人的帮助来克服这个艰难的开始。 万分感谢!
【问题讨论】:
欢迎来到 ***.com。请花一些时间阅读the help pages、阅读the SO tour、阅读有关how to ask good questions 的信息,并了解如何创建Minimal, Complete, and Verifiable Example。我还建议您阅读this SO question checklist,并阅读所有idownvotedbecau.se,以了解您的问题投反对票的一些原因。 这是真正的问题。从盒子里,webrtc 在用 ninja 构建他之后不起作用。现在我也有这个问题。我检查了分支 70、69、66。没有改变。 【参考方案1】:这可能是因为std::string
的ABI 不兼容。 libstdc++
已从旧的 COW 实现更改为另一个。链接器需要std::string
的__cxx11
版本,但库是用另一个编译的。
一种可能的解决方案是使用实际操作系统中的libstdc++
,而不是WebRTC Native 附带的libc++
。为此,请编辑 ninja 文件中的所有命令行选项以删除 -nostdlib
之类的内容并将 sysroot 设置为实际 root:
sed -i -re 's#obj/buildtools/third_party/libc[^[:space:]]*\s*##g' obj/webrtc.ninja
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*-nostd(inc|lib)\+\+//' \+
find . -type f -name \*.ninja -a ! -name \*libc++* -exec sed -i -re 's/\s*\S*isystem\S*libc\+\+\S*//g' \+
find . -type f -name \*.ninja -exec sed -i -re 's#(--sysroot=)[^[:space:]]*#\1/#' \+
find . -type f -name \*.ninja -exec sed -i -re 's#(-L)[^[:space:]]*-sysroot#\1#g' \+
find . -type f -name \*.ninja -exec sed -i -re 's#(rpath-link=)[^[:space:]]*-sysroot#\1#g' \+
还有其他问题,它们会随着代码的变化而变化。构建和使用该库需要大量工作。
【讨论】:
你在 ninja 文件中改变了什么? @RN3KKNick,我添加了一些正则表达式。以上是关于如何将 webrtc 原生 api 添加到我的 qt 项目中?的主要内容,如果未能解决你的问题,请参考以下文章