Ubuntu 20.04编译WebRTC

环境:虚拟机64位Ubuntu 20.04
前提:需要有一个可以用的代理(非常重要,没有代理几乎无法下载完整的WebRTC代码

一、环境配置

WebRTC中文网有提供国内的WebRTC镜像,但目前WebRTC依赖的第三方库在国内镜像源里还未提供,因此需要配置环境代理,这是我的代理设置:

export https_proxy=http://127.0.0.1:41091 http_proxy=http://127.0.0.1:41091 all_proxy=socks5://127.0.0.1:1090

这相当于临时设置的环境变量,只在当前打开的控制台窗口有效。当然也可以全局设置代理,应用到整个系统:

#打开bashrc文件:
sudo vim ~/.bashrc
#写入:
export https_proxy=http://127.0.0.1:41091
export http_proxy=http://127.0.0.1:41091
export all_proxy=socks5://127.0.0.1:1090
#执行:
source ~/.bashrc

二、安装depot_tools

depot_tools是个工具包,里面包含gclient、gcl、gn和ninja等工具,这些根据都是使用python写的。其主要的功能是对git的增强,让代码管理和编译更加简单。WebRTC就是通过depot_tools工具进行版本管理的,因此首先要下载depot_tools工具:

#自己是在/home/rtc目录下安装depot_tools,也可以选其他目录
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

https://chromium.googlesource.com/是谷歌的镜像源,没有代理几乎是连接不上的

成功下载后要设置环境变量,由于之后WebRTC的代码都需要通过depot_tools管理,因此可以设置成全局变量:

vim ~/.bashrc
# .bashrc添加如下一行
export PATH="$PATH:/home/rtc/depot_tools"
source ~/.bashrc

注意:在拉取WebRTC代码时同时会下载WebRTC源码、编译依赖的资源文件,同时会更新depot_tool中的cipd工具链本身,但镜像包只能镜像git仓库,编译依赖的资源文件依然需要使用depot_tool里面的cipd下载,所以还得再执行下一步的设置:

  1. 禁用cipd工具更新:
export DEPOT_TOOLS_UPDATE=0
  1. 设置下载工具代理
vim .boto
#在.boto文件中输入一下内容保存
[Boto]
proxy = 127.0.0.1
proxy_port = 1090
  1. 设置环境变量指向前面文件
export NO_AUTH_BOTO_CONFIG=/home/rtc/.boto

三、获取代码

mkdir webrtc
cd webrtc
#获取代码
fetch --nohooks webrtc
#用于中断后继续下载
gclient sync

一般fetch --nohooks命令下载的WebRTC代码都不完全,即使通过国内的镜像源下载,也是会出现部分依赖无法下载的情况。我在电脑上下载的时候,都是出现第三方库依赖无法下载的问题,以下是获取源码过程中的部分信息打印:

Sat Aug  7 01:26:00 CST 2021
Running depot tools as root is sad.
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
1>________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://webrtc.bj2.agoralab.co/webrtc-mirror/src.git /home/rtc/webrtc/_gclient_src_hHgNXk' in '/home/rtc/webrtc'
1>Cloning into '/home/rtc/webrtc/_gclient_src_hHgNXk'...
1>remote: Enumerating objects: 353190, done.
1>remote: Counting objects: 100% (353190/353190), done.
1>remote: Compressing objects: 100% (75706/75706), done.
1>remote: Total 353190 (delta 267568), reused 353022 (delta 267465)
1>Receiving objects: 100% (353190/353190), 269.76 MiB | 12.24 MiB/s, done.
1>Resolving deltas: 100% (267568/267568), done.
Syncing projects:   2% ( 1/40) src
[0:03:55] Still working on:
[0:03:55]   src/base
[0:03:55]   src/build
[0:03:55]   src/buildtools
[0:03:55]   src/testing
[0:03:55]   src/third_party
[0:03:55]   src/tools
7>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://webrtc.bj2.agoralab.co/webrtc-mirror/chromium/src/tools" "/home/rtc/webrtc/src/_gclient_tools_uqClZk"' in /home/rtc/webrtc failed; will retry after a short nap...

[0:04:05] Still working on:
[0:04:05]   src/base
[0:04:05]   src/build
[0:04:05]   src/buildtools
[0:04:05]   src/testing
[0:04:05]   src/third_party
[0:04:05]   src/tools

#...省略大部分打印
[0:13:36] Still working on:
[0:13:36]   src/third_party
[0:13:36]   src/tools
 
[0:13:46] Still working on:
[0:13:46]   src/third_party
[0:13:46]   src/tools

#最后的打印结果
File “/home/rtc/depot_tools/gclient_utils.py”, line 983, in run
self.item.run(*self.args, **self.kwargs)
File “/home/rtc/depot_tools/gclient.py”, line 933, in run
file_list)
File “/home/rtc/depot_tools/gclient_scm.py”, line 132, in RunCommand
return getattr(self, command)(options, args, file_list)
File “/home/rtc/home/rtc/depot_tools/gclient_scm.py”, line 553, in update
self._Clone(revision, url, options)
File “/home/rtc/depot_tools/gclient_scm.py”, line 1060, in _Clone
if os.listdir(tmp_dir):
OSError: [Errno 2] No such file or directory: ‘/home/rtc/webrtc/src/_gclient_third_party_cBey1o’

在我的电脑上,最后打印的结果说明第三方依赖库third_party下载失败,从一直刷这些日志可以看出:

[0:13:46] Still working on:
[0:13:46]   src/third_party
[0:13:46]   src/tools

为了下载完整的WebRTC代码,需要在执行fetch --nohooks命令后再执行:

gclient sync
#或者
gclient sync --nohooks --no-history #重复拉取不会多次下载同样代码

我一般是用gclient sync。其中hooks就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本,具体可见https://blog.csdn.net/weixin_30693683/article/details/98416829

四、安装依赖

在下载完整的WebRTC代码后,就需要安装依赖。这一步也是需要连接代理:

cd /home/rtc/webrtc/src
./build/install-build-deps.sh

五、生成Ninja工程文件

WebRTC默认使用Ninja作为编译系统,Ninja工程文件通过GN生成。
使用如下命令生成默认配置工程(Debug编译,工程文件位于out\Default目录下):

gn gen out/Default
#或者参数详细点,不过gn工具也可以获取这些信息
gn gen out/Default --args='target_os="linux" target_cpu="arm64"'

如果需要Release编译,通过如下命令生成工程文件:

gn gen out/Default --args='is_debug=false'

需要说明的是,ubuntu 20.04版本python2与python3都有安装,默认python命令使用的是python2,但是电脑上用python2的话会出现各种神奇的错误,因此我默认是用python3来执行

六、编译

ninja -C out/Default

最后在src/out/Default/obj可以看到生成的静态库文件:libwebrtc.a。

七、代码更新

后续如需要更新代码,按照如下步骤执行即可:

git checkout master
git pull origin master
gclient sync

参考

  1. Linux平台WebRTC编译
  2. WebRTC 源码国内镜像
  3. linux配置webRTC环境问题(1)
  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
回答: 要在Ubuntu 20.04编译内核,可以按照以下步骤进行操作。 首先,在终端中打开/etc/apt/sources.list文件: ``` sudo gedit /etc/apt/sources.list ``` 在文件末尾添加以下两行内容以更新软件源: ``` deb http://us.archive.ubuntu.com/ubuntu/ xenial main universe deb-src http://us.archive.ubuntu.com/ubuntu/ xenial main universe ``` 保存并关闭文件。 接下来,安装make-kpkg工具: ``` sudo apt install kernel-package ``` 然后,使用make-kpkg编译并生成deb安装文件。以下是一个示例命令: ``` sudo make-kpkg --initrd --append-to-version -20220228 --revision 001 kernel_image kernel_headers -j4 ``` 这个命令将生成内核映像和头文件的deb安装文件。可以根据需要修改命令中的版本号等参数。 最后,更新软件包列表并安装编译所需的依赖项: ``` sudo apt-get update sudo apt-get install gcc g sudo apt-get install libncurses5-dev sudo apt-get install build-essential sudo apt-get install kernel-package sudo apt-get install libssl-dev sudo apt-get install libc6-dev sudo apt-get install bin86 sudo apt-get install flex sudo apt-get install bison sudo apt-get install qttools5-dev sudo apt-get install libelf-dev ``` 完成上述步骤后,您可以根据需要对Ubuntu 20.04进行编译。请注意,这只是一个示例过程,您可能需要根据您的具体需求进行适当的修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [手把手一步步实现 Ubuntu20.04编译Android10系统源码](https://blog.csdn.net/h5630/article/details/127715207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux内核开发——编译Ubuntu 20.04内核代码](https://blog.csdn.net/feihe027/article/details/125424910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值