工作需要测试网络传输算法,逐学习WebRTC源码

工作环境

Mac OS 10.14

Xcode 10.2.1

源码下载

从google(需要【你懂的】)

  1. 首先【你懂的】
  2. 打开终端,输入curl www.google.com看能不能返回正确的html数据,有的【你懂的】手段只有浏览器能翻过去,但是终端不行,这样没法安装
  3. 按照官方教程,一步步输入命令:
    mkdir webrtc-checkout
    cd webrtc-checkout
    fetch --nohooks webrtc
    gclient sync
  4. 漫长的等待后源码下载完成,创建自己的brantch,用于git版本控制:
    cd src
    git checkout master
    git new-branch your-branch-name
  5. 如果需要更新源码:(还没试过)
    git checkout master
    git pull origin master
    gclient sync
    git checkout my-branch
    git merge master

从别人下载好的源码

这个可能可以从github、CSDN等地方找到吧,我没试

编译源码

生成Ninja文件

google的大项目的编译首先会通过gn工具来组织项目的编译,约等同于Cmake吧,BUILD.gn大概扮演了CMakeList.txt的角色

它会根据你的目标环境(比如不同操作系统之类的),生成相应的Ninja文件,约等于Makefile的作用。

gn+NinjaCMake+makefile的优势是速度快,尤其是改动很小的时候

gn gen out/Default

就能生成Ninja文件了,GN的文档里还有很多参数的介绍,可以使用--ide选项来生成对应IDE的项目文件。

由于CLION用不了,所以用了Xcode,命令如下:

gn gen out/Default --ide="xcode" --workplace="audio_fec"

如果想清空某次生成的Ninja文件,使用:

gn clean out/Default

利用Ninja进行编译

ninja -C out/Default

这时候!!!!!有bug!!!!

吐槽一下找bug历程:

懵逼了几个月,后来突然看到有一句but the deployment target is 10.10.0,我就在想,这个deployment target是在哪设置的呢?往上一看,命令行里有一句-mmacosx-version-min=10.10.0

ok,这个命令是在哪出来的呢?还记得ninja文件有makefile的作用嘛,那估计是在ninja文件里。出bug的.oobj/examples/apprtc_signaling/ARDSettingsModel.o,所以去out/Default/obj/examples下面看到了apprtc_signaling.ninja文件,命令行里的这句话果然是在这里定义的,但是找到了ninja文件并没有什么卵用

ninja文件是gn产生的,所以要看gn文件,找到出问题的src/examples/objc/下面的BUILD.gn,一打开就看到这个:



好吧,那macos版本信息估计在这个rules.gni里了,打开之后发现估计在base_rules.gni里,打开这个文件之后:



ok,那估计就在这个mac_sdk.gni里了

打开来之后终于看到了曙光!

找到src/build/config/mac/mac_sdk.gni文件,打开来长成这样:(截图是我改过之后的)

,把mac_deployment_target10.10.0改成10.11.0就可以了,保存之后clean,然后再用gn gen生成一次ninja文件,最后再用ninja编译,就没问题了!

运行Demo

out/Default下面有个AppRTCMobile.app打开来可以玩= =

WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行的更多相关文章

  1. 【VS开发】win7下让程序默认以管理员身份运行

    在win7中用自己写的程序读取MBR时,突然提示无法对磁盘进行操作,而在xp下并没有这个问题:最后点右键以管理员身份运行才可以正常运行.于是想办法让程序在双击启动时默认以管理员身份运行.具体方法: 1 ...

  2. linux下源码安装软件

    在linux下的很多软件都是通过源码包方式发布的,这样做对于最终用户而言,虽然相对于二进制软件包,配置和编译起来繁琐点,但是它的可移植性却好得多,针对不同的体系结构,软件开发者往往仅需发布同一份源码包 ...

  3. macOS下appstore提示未能完成该操作的解决办法

    macOS下App Store下载软件,提示:未能完成该操作.(com.apple.commerce.client 错误 500.) 解决办法: 在终端输入 defaults write com.ap ...

  4. 【转载】MacOS下IntelliJ IDEA关联JDK1.8源码

    原文地址: MacOS下IntelliJ IDEA关联JDK1.8源码 1 打开jdk设置,找到具体添加的地方 2 找到自己jdk的源码位置替换掉 3 如果没有源码或者源码没有下载解压,自己下载解压, ...

  5. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  6. Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

    最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...

  7. 【转】Win 7 下源码运行OpenERP7.0

    原文地址:Win 7 下源码运行OpenERP7.0 安装Python2.7 下载地址:http://www.python.org/getit/注:OpenERP7.0支持的Python版本最高为2. ...

  8. Windows下用Git下载android源码 转载

    http://my.oschina.net/jiadebin/blog/52631 1.首先你的电脑要安装好git,这个请参考git官网. 2.打开git命令窗口输入git clone http:// ...

  9. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

随机推荐

  1. 11. 关于WIN7 64位系统安装ADS的种种意外情况解决方法

    安装ADS的环境,以前安装过,觉得应该可以安装呀,没想到,装不上,安装不成功,后来花费好长时间,终于把他装好了,费时费力呀. 特此记录一下,以戒后人.大家安装问题建议整篇看完,再去安装,以防一个问题解 ...

  2. Spark基础:(四)Spark 数据读取与保存

    1.文件格式 Spark对很多种文件格式的读取和保存方式都很简单. (1)文本文件 读取: 将一个文本文件读取为一个RDD时,输入的每一行都将成为RDD的一个元素. val input=sc.text ...

  3. 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)

    一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...

  4. Use of explicit keyword in C++

    Predict the output of following C++ program. 1 #include <iostream> 2 3 using namespace std; 4 ...

  5. 【Linux】【Shell】【Basic】Programming

    shell脚本编程: 编程语言的分类:根据运行方式 编译运行:源代码-->编译器(编译)-->程序文件 解释运行:源代码-->运行时启动解释器,又解释器边解释边运行 根据其编程过程中 ...

  6. 01_ubantu国内软件源配置

    查找自己版本对应的软件源 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ 以下为19.10版本清华大学的,个人100M的带宽,平均安装速度在600K ...

  7. MFC入门示例之水平滚动条和垂直滚动条(CScroll Bar)

    初始化滚动条 1 //初始化滚动条 2 SCROLLINFO si = { 0 }; 3 si.cbSize = sizeof(si); 4 si.fMask = SIF_RANGE | SIF_PA ...

  8. 什么是mysql innodb cluster?

    目录 一.简介 二.特性 一.简介 MySQL InnoDB集群提供了一个集成的,本地的,HA解决方案.MySQL InnoDB集群由以下几部分组成: MySQL Servers with Group ...

  9. pipeline 步骤

    目录 一.简介 二.文件相关 删除当前目录 切换到目录 判断文件是否存在 判断是否为类Unix 返回当前目录 将内容写入文件 读取文件内容 二.制品相关 存取临时文件 三.命令相关 script sh ...

  10. LuoguB2013 温度表达转化 题解

    Content 输入华氏温度 \(F\),请将其转化为摄氏温度 \(C\),精确到小数点后 \(5\) 位. 数据范围:\(F\geqslant -459.67\). Solution 简单的输入输出 ...