【问题标题】:How to add webrtc native apis into my qt project?如何将 webrtc 原生 api 添加到我的 qt 项目中?
【发布时间】: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 tortc::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的?我真的需要有人的帮助来克服这个艰难的开始。 万分感谢!

【问题讨论】:

标签: c++ linux qt webrtc


【解决方案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,我添加了一些正则表达式。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2014-02-27
  • 2010-10-14
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
相关资源
最近更新 更多