我这几天遇到了麻烦,所以我真的需要一些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 >*) 的未定义引用
我搜索了头文件,发现函数是在 rtc_base/checks.h 中声明的,我去阅读 BUILD.GN,发现“检查”已经构建到 librtc_base_genetic.a 中。我很确定我已经将这个库添加到我的 qt .pro 文件中。
我正在使用 ubuntu18、QT5.10.1,我在 5 月 19 日拿到了源代码。如果您能给我任何建议,也许这是如何发生的或者我该如何解决这个问题,我将不胜感激。
有没有人导入webrtc原生库并成功使用过apis?我真的需要有人的帮助来克服这个艰难的开始。我最感激!
这可能是因为std::string
. 在libstdc++
从老牛落实到另一个改变。链接器需要 的__cxx11
版本std::string
,但库是用另一个版本编译的。
一种可能的解决方案是使用libstdc++
来自实际操作系统的操作系统,而不是libc++
使用 WebRTC Native 自带的操作系统。为此,请编辑 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' {} \+
还有其他问题,它们会随着代码的变化而变化。构建和使用该库需要大量工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句