c++ - 如何将 webrtc 原生 api 添加到我的 qt 项目中?

标签 c++ linux qt webrtc

这几天我遇到了麻烦,所以我真的需要一些 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::allocator >*)' follow

我搜索了头文件,发现该函数是在rtc_base/checks.h中声明的 我去阅读 BUILD.GN 并发现“检查”已构建到 librtc_base_genic.a 中。我很确定我已将此库添加到我的 qt .pro 文件中。

我正在使用ubuntu18,QT5.10.1,我在5月19日得到了源代码。 如果您能给我任何建议,也许这是如何发生的或者我该如何解决这个问题,我将非常感激。

有谁导入了webrtc原生库并成功使用了api吗?我真的需要有人的帮助来度过这个艰难的开始。 我最感激的是!

最佳答案

这可能是因为 std::string 的 ABI 不兼容。 libstdc++ 已从旧的 COW 实现更改为另一种实现。链接器需要 std::string__cxx11 版本,但该库是用另一个版本编译的。

一个可能的解决方案是使用实际操作系统中的 libstdc++ 而不是 WebRTC Native 附带的 libc++。为此,请编辑 ninja 文件中的所有命令行选项以删除诸如 -nostdlib 之类的内容,并将 sysroot 设置为实际根目录:

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' {} \+

还有其他问题,它们会随着代码的变化而变化。构建和使用该库需要做很多工作。

关于c++ - 如何将 webrtc 原生 api 添加到我的 qt 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50676257/

相关文章:

c++ - 概念可以与CRTP习语一起使用吗?

c# - Linux 上的 .NET 核心 X509Store

qt - 如果选择了 QComboBox 中的某个值,则停用 QSpinBox

c++ - 如何编译支持文本编解码器的 Qt 库 4.7.1?

linux - 在 linux debian 中,如何从路由中删除默认网关

c++ - QML FontLoader 不工作

c++ - 垂直扫过的最近对

python - 从 PyArray_SimpleNewFromData 创建 Numpy NDArray 的问题

c++ - 命名空间导致模板重载解析不理想

linux - 如何使用 Unix/Linux 删除文件夹中以前版本的 jar