Ubuntu下基于Qt框架,使用WebRtc开发总结(三):gn配置和ninja构建文件分析

趁着今天状态满满,再写一篇好了,说句题外话,推荐WebRtc的Google讨论组的地址:谷歌讨论组,注册了谷歌账号,在里面登录以后就可以想贴吧论坛一样使用了,高手很多,很多问题可以在里面得到解答,当然,前提是英语要过得去,能够描述清楚自己的问题,并且能看懂回复2333333。

那么这一部分是对gn和ninja的分析总结,由于gn和ninja官网写的东西实在太多了,完全不够时间去读,因此,除了很基础的语法,大部分的解读完全是靠语义和文件结构来进行的分析,觉得不靠谱的可以不看就是了,不过确实能根据这些经验总结来改WebRtc的编译配置。

.gn文件

首先先说实话,这个总结会比较凌乱,因为没有系统的去了解过gn工具,想到哪里写到哪里,如果要用的话,选自己需要的部分看就好了。

个人对于gn和ninja的大体理解是通过和cmake比较的,gn文件就相当于cmakelist,执行了gn gen操作,就类似于执行了cmake语句,那一般在build目录下面就生成了.ninja和.stamp文件,然后ninja编译器通过.ninja文件,把代码编译成可执行文件.o,然后把.o文件链接起来,组成可执行程序或者库文件。也就是平时的cmake->make变成了gn gen->ninja的这么一个过程。

用一个具体一点的gn文件来说明吧,以src/exmaples文件夹下的BUILD.gn举例,重要的部分分为下面几个:

1、import("../webrtc.gni")

好理解,类似于导入头文件,.gni文件就相当于gn的头文件,在webrtc.gni里,进行了一些函数的声明定义,可以在里面进行修改。接下来列举的部分,多数也都是这个头文件里面定义的函数,所以如果需要自定义编译的话,就去修改之。

2、group("examples")

理解成一个类吧,或者一个对象,一个包含了多个库或可执行文件的组。

3、rtc_android_library、rtc_static_library、rtc_executable等等自定义函数,如果不做修改的话,可以直接把代码的.h和.cc文件放进去后,添加到对应的函数里面,后面括号里写生成的名字,就可以利用gn和ninja来编译了,不过我是用Qt框架做,自然不需要这么干,不过我是尝试过的,确实是可以生成对应的库文件或是可执行文件。

4、testonly = true

这个东西是WebRtc用来测试的时候,加的开关,在生成的时候会检测这个状态,默认是关闭的,如果是开着的,那编译出来的库是不可用的,因为是testonly,根据自己需要去调整吧,有些时候,一些测试类和测试库还是会用到的,注释掉这一行就可以了。

5、sources = [] / sources +=

用来添加.h和.cc文件,后面跟着需要添加的源码文件的头文件路径和实现文件路径。

6、deps = [] /  deps +=

用来添加依赖的,添加group或是rtc_static_library,如果是添加group,会记录group里面成员的依赖关系,在执行gn操作的时候,把依赖都添加进来。

7、libs = [] / libs += []

添加动态库的依赖。

题外话,5/6/7这三个以及其他的涉及+=和=的,应该多少都能看出来,=的话是直接赋值,也就是如果默认有值,或者之前设过值的话,=操作以后会覆盖掉,而不会保留,+=操作则会。

上面是最常用到的地方,剩下的例如config,cflags等等的东西,都需要自己去读gn文件和gni文件,来根据自己的需求进行修改。

顺带一提,我在最开始引用WebRtc静态库的时候,各种报错,例如使用c++库的不同,导致编译的时候,识别不出来作为参数传递的sdt::string,找不到函数实现等等。最坑爹的莫过于找不到函数实现,那么我排查下来,发现是找不到../api/audio_codecs:builtin_audio_decoder_factory的静态库,原因是该静态库的上层文件夹的gn文件没有把它加入deps,那么在我修改了gn文件后,解决了这个问题。如果有人出现了类似的,引用了libwebrtc.a,却找不到函数实现的问题,可以从这个方向进行排查。

.ninja文件

这个了解的并不多,也没修改过,因为是自动生成的,也就讲一讲大概里面都有什么。

里面的话会有很多的编译宏定义,include文件夹位置,编译出来的可执行文件.o的名字,输出目录,以便ninja编译器对源码进行编译。

同时会生成.stamp文件,但是这个文件什么用,我可耻的忘记了。。。

那么,经过前三部分的总结,应该就可以在Qt中使用WebRtc的库了,下面的部分将陆陆续续对WebRtc中PeerConnection也就是视频对接部分的使用,进行总结归纳和代码分析,若文章中有什么不正确的地方欢迎指正,大家共同学习进步!

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值