美文网首页webrtc 音视频传输
mediasoup-broadcaster-demo 编译

mediasoup-broadcaster-demo 编译

作者: 自由侠 | 来源:发表于2020-06-06 11:38 被阅读0次

cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH:PATH="/home/yq/share/src/mediasoup/client/libwebrtc/src" -DLIBWEBRTC_BINARY_PATH:PATH="/home/yq/share/src/mediasoup/client/libwebrtc/src/out/mybuild-m79/obj" -DOPENSSL_INCLUDE_DIR:PATH="/usr/local/include" -DCMAKE_USE_OPENSSL=ON -DMEDIASOUPCLIENT_LOG_DEV=true -DMEDIASOUPCLIENT_LOG_TRACE=true

编译注意事项:

  cpr 里边有个libcurl.so 需要依赖openssl 相关的库,  libwebrtc.a 也有同样的依赖,  所以在编译libcurl.so 时依赖的openssl 相关的库和头文件必须是 libwebrtc.a 所依赖的头文件和库;

依赖的库有 libssl.a libcrypto.a;

路径为:

openssl 头文件路径为:

src/build/linux/debian_sid_amd64-sysroot/usr/include/openssl

另外需要注意的是x86_64平台的相关配置需要copy到openssl头文件里边:

cp src/build/linux/debian_sid_amd64-sysroot/usr/include/x86_64-linux-gnu/openssl/*

src/build/linux/debian_sid_amd64-sysroot/usr/include/openssl

以上的cmake 选项只指定了头文件路径, 没有指定库的路径, 所以需要把webrtc中的相关库复制到系统路径:

cd webrtc:

sudo cp ./src/build/linux/debian_sid_amd64-sysroot/usr/lib/x86_64-linux-gnu/libssl.a /usr/local/lib/

sudo cp ./src/build/linux/debian_sid_amd64-sysroot/usr/lib/x86_64-linux-gnu/libcrypto.a /usr/local/lib/

sudo rm /usr/local/include/openssl -r

sudo cp ./src/build/linux/debian_sid_amd64-sysroot/usr/include/openssl /usr/local/include/openssl -r

把x86_64 openssl 的配置头文件copy过去:

sudo cp ./src/build/linux/debian_sid_amd64-sysroot/usr/include/x86_64-linux-gnu/openssl/* /usr/local/include/openssl/

make -C build

问题:

[ 0%] Linking C shared library ../../../../lib/libcurl.so

/usr/bin/ld: /usr/local/lib/libssl.a(s3_clnt.o): relocation R_X86_64_PC32 against symbol `ssl3_get_server_hello' can not be used when making a shared object; recompile with -fPIC

/usr/bin/ld: 最后的链结失败: 错误的值

解决:

  需要把/usr/local/lib/libssl.a 替换为webrtc 目录下的libssl.a

  所在目录:  src/build/linux/debian_sid_amd64-sysroot/usr/lib/x86_64-linux-gnu/libssl.a

问题:

/home/yq/share/src/mediasoup/demo/mediasoup-broadcaster-demo/deps/libmediasoupclient/include/Logger.hpp:55:25: error: ‘uint8_t’ was not declared in this scope

解决:

https://stackoverflow.com/questions/1971062/error-uint8-t-has-not-been-declared

问题:

/home/yq/share/src/mediasoup/demo/mediasoup-broadcaster-demo/deps/libmediasoupclient/src/ortc.cpp: In function ‘void mediasoupclient::ortc::validateRtpCodecCapability(json&)’:

/home/yq/share/src/mediasoup/demo/mediasoup-broadcaster-demo/deps/libmediasoupclient/src/ortc.cpp:106:81: error: use of deleted function ‘bool std::regex_match(const std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&, std::__cxx11::match_results<typename std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&, const std::__cxx11::basic_regex<_Ch_type, _Rx_traits>&, std::regex_constants::match_flag_type) [with _Ch_traits = std::char_traits<char>; _Ch_alloc = std::allocator<char>; _Alloc = std::allocator<std::__cxx11::sub_match<__gnu_cxx::__normal_iterator<const char, std::__cxx11::basic_string<char> > > >; _Ch_type = char; _Rx_traits = std::__cxx11::regex_traits<char>; typename std::__cxx11::basic_string<_Ch_type, _Ch_traits, _Ch_alloc>::const_iterator = __gnu_cxx::__normal_iterator<const char, std::__cxx11::basic_string<char> >]’

std::regex_match(mimeTypeIt->get<std::string>(), mimeTypeMatch, MimeTypeRegex);

                                                                            ^

In file included from /usr/include/c++/7/regex:62:0,

            from /home/yq/share/src/mediasoup/demo/mediasoup-broadcaster-demo/deps/libmediasoupclient/src/ortc.cpp:8:

/usr/include/c++/7/bits/regex.h:2121:5: note: declared here

regex_match(const basic_string<_Ch_type, _Ch_traits, _Ch_alloc>&&,

解决:

https://stackoverflow.com/questions/32164501/error-use-of-deleted-function-bool-regex-match-with-gcc-5-2-0

问题:

[ 77%] Linking CXX executable broadcaster

/usr/bin/ld: broadcaster: hidden symbol `SSLeay' in /home/yq/share/src/mediasoup/client/libwebrtc/src/out/mybuild-m79/obj/libwebrtc.a(crypto.o) is referenced by DSO

/usr/bin/ld: final link failed: Bad value

原因:

  SSLeay  在特定的ssl 版本中才有的函数,  经过对比发现,  openssl 头文件和库的版本不一致;

解决:

  该工程所依赖的openssl 的头文件和库文件都需要依赖 webrtc 项目中的 openssl项目;  具体依赖的库为 libcrypto.a  libssl.a;    头文件也在webrtc 里边有相关路径;    里边有32位版本和64位版本,  需要用到与编译系统一样的版本即可!

相关文章

  • mediasoup-broadcaster-demo 编译

    cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH:PATH="/home/yq/...

  • dtb文件编译

    反编译 编译 批量反编译

  • 编译过程与静态库&动态库

    一、编译过程 1、预编译(Preprocessing) 预编译即预处理,编译器不能直接对预编译命令进行编译,必须在...

  • 宏、const、static、extern使用详解

    宏与const的区别 编译时刻:宏是预编译(编译之前处理),const是编译阶段。编译检查:宏不做检查,不会报编译...

  • iOS const 与宏

    编译时刻:宏是预编译(编译之前处理),const是编译阶段。 编译检查:宏不做检查,不会报编译错误,只是替换,co...

  • 2020-09-09 RK系统编译

    编译uboot: 编译kernel: 环境配置: 编译系统:

  • 程序编译过程

    本文编译的文件cpu架构为X86_64。 编译型语言编译过程主要有预编译、编译、汇编、链接。 预编译This st...

  • 自己动手编译OpenJDK

    Linux下 编译 Centos 下编译OpenJDK Mac下编译 MacOS 下编译OpenJDK Windo...

  • 宏 const static extern的区别与使用

    一. const 与 宏的区别 编译时刻: 宏是预编译(编译之前处理), const是编译阶段处理 编译检查: 宏...

  • 晚期(运行期)优化

    HotSpot的即时编译器 解释器与编译器 编译对象与触发条件 编译过程 编译优化技术 如果还对其他的经典编译优化...

网友评论

    本文标题:mediasoup-broadcaster-demo 编译

    本文链接:https://www.haomeiwen.com/subject/sytizhtx.html