最近在做Linux平台下webRTC的二次开发,一路摸索,中间踩了不少坑,这一篇博客先来简单介绍下Linux上如何使用GCC编译webRTC。

为什么使用GCC编译?

这其实是无奈之举,Linux下webRTC中的ninja工程使用的是Clang进行编译,且依赖其内置的stdc标准库。然而我现有的开发环境所使用的编译器为GCC,在使用Clang进行webRTC二次开发时遇到各种编译错误,只好改用GCC重新编译webRTC。

1.获取webRTC源码

需要准备一个梯子,同时使用工具进行终端穿墙。

获取源码流程可以查看官方文档https://webrtc.org/native-code/development/

首先安装Chromium depot tools;

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

将depot tools路径添加道环境变量中

export PATH=$PATH:/path/to/depot_tools

然后获取webRTC源码

mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

webrtc源码下载下来很大,确保翻墙工具有足够的流量

2.修改BUILD.gn

如果不修改GN files会出现一堆错误,编译无法通过

关闭-Werror编译选项

build/config/complier/BUILD.gn

修改treat_warnings_as_errors=false

使用系统stdc标准库

build/config/c++/BUILD.gn

注释掉

cflags_cc += [
"-nostdinc++"
]
cflags += ["-fno-builtin-abs"]
ldflags += ["-nodefaultlibs"]
libs += [
"c",
"gcc_s",
"m",
"rt",
]

使用gcc编译命令为

gn gen webrtc-checkout/src/out/Default --args="is_clang=false"
ninja -C webrtc-checkout/src/out/Default

编译过程中可能会遇到因为源码问题导致编译出错,修改即可

编译成功后,即可使用gcc二次编译开发

注意编译时需添加一些编译选项

使用cmake构建工程时添加

set(CMAKE_CXX_FLAGS "-fno-rtti")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWEBRTC_LINUX=1 -DWEBRTC_POSIX=1")

Linux基于webRTC的二次开发(一)的更多相关文章

  1. Linux基于webRTC的二次开发(二) 实现远程桌面共享

    webRTC中的desktop_capture模块提供了捕获桌面和捕获窗口的相关功能,而实现远程桌面共享功能需要将desktop_capture捕获的画面作为peerconnection的视频源,下面 ...

  2. [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)

    前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...

  3. 深入理解基于selenium的二次开发

    对于做web端自动化测试的人来说,可能接触selenium比QTP还要多,但是我们在做基于selenium的二次开发的时候,经常会说到二次开发是为了易于维护,很多人可能不懂得维护的价值是什么,和到底要 ...

  4. Qt4.8.6+mingw+Qgis2.4.0基于QGis的二次开发

    关于QGis的二次开发,大致看了一下,基本都是在VC+QT的环境下做环境部署,并且QGis的版本号很老.在mingw下直接开发搭建好开发环境的样例少之又少.基于最新的Qgis2.4.0版本号做了对应的 ...

  5. C#基于AE组件二次开发常见问题

    由于本人从事的是在.net平台下进行GIS的二次开发,所以第一篇博文就说一下:我最近在项目中出现的常见的问题,如果能够给大家增加一点点便利,也是我的荣幸,如果大家对于这次博文有什么意见和建议,欢迎大家 ...

  6. 基于Django+celery二次开发动态配置定时任务 ( 一 )

    需求: 前端时间由于开发新上线一大批系统,上完之后没有配套的报表系统.监控,于是乎开发.测试.产品.运营.业务部.财务等等各个部门就跟那饥渴的饿狼一样需要 各种各样的系统数据满足他们.刚开始一天一个还 ...

  7. 最佳实践 | 联通数科基于 DolphinScheduler 的二次开发

    点击上方 蓝字关注我们 ✎ 编 者 按 数据时代下,井喷的数据量为电信行业带来新的挑战.面对每日数百 TB 的新增数据,稳定可靠的调度系统必不可少. 中国联通旗下的联通数字科技有限公司(以下简称&qu ...

  8. 基于Django+celery二次开发动态配置定时任务 ( 二)

    一.需求 结合上一篇,使用djcelery模块开发定时任务时,定时任务的参数都保存在djcelery_periodictask表的args.kwargs字段里,并且是json格式.那么,当定时任务多了 ...

  9. 基于AndroidPn二次开发的可行性

    一.背景 如果要自己搭建,从零开始做或基于开源进行修改扩充,开源的push引擎,90%的博文首推AndroidPN,结合公司现状,最优解决方案就是进行AndroidPN的二次开发了.先看一下这个项目: ...

随机推荐

  1. Java基础学习笔记(四) - 认识final关键字、权限修饰符和内部类

    一.final关键字 为什么要使用 final 关键字? 通过继承我们知道,子类可以重写父类的成员变量和方法.final 关键字可以用于修饰父类,父类成员变量和方法,使其内容不可以被更改. 1.被修饰 ...

  2. 【mybatis】1mybatis下载、配置与初步使用

    一.mybatis历史: 额,学习一门新事物时了解一下它的历史能在脑中形成一个大致的轮廓...进入正题... mybatis以前叫做ibatis,ibatis是Apache旗下的产品,在2010年时g ...

  3. 【Java】访问mysql数据库视图

    数据库连接Connect: package cn.hkwl.zaxq.mysql; import java.sql.Connection; import java.sql.DriverManager; ...

  4. 对BUG的分析与理解

    对BUG的分析与理解 bug的分类 bug,其实就是软件期望的行为与实际行为的差异.从程序的角度来看,在软件整个生命周期中都会有bug的出现.需求分析过程中,需求理解的不足,导致的理解错位 ,遗漏甚至 ...

  5. JS中的prototype、__proto__与constructor

    1.前言 作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关 ...

  6. String的常见面试题

    下面代码,是我前些天在网上搜集的一小部分String的面试题.个人觉得感触很深,希望对大家有所帮助.不好的也请大家批评指正. package com.zys.string; public class ...

  7. session与cookie,django中间件

    0819自我总结 一.session与cookie 1.django设置session request.session['name'] = username request.session['age' ...

  8. DJango错误日志生成

    DJango错误日志生成 setting.py设置 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': ...

  9. CTF-SMB渗透

    环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.103  靶场下载: 链接:https://pan.baidu.com/s/1OwNjBf7ZEGmFlRq ...

  10. PHP krsort

    1.什么都不想说了,干么没事放那么悲伤的歌呢?回忆里我还是对代码懵懵懂懂的无知青年!也许不是青年,只是少年... <?php $arr = [ 1 => 'Zhangbiyu', 2 =& ...