WebRTC源码学习02---webrtc源码编译安装(Mac)
参考文献
https://webrtc.org.cn/mirror/ (主要参考文章)
https://www.an.rustfisher.com/webrtc/intro/sync-build/(参考一下代理设置)
https://blog.csdn.net/dangwei_90/article/details/110224909(xcode内建库版本修改)
安装过程遇到的问题
(一)同步WebRTC,vi .gclient对.gclient添加以下内容
solutions = [ { "name" : "src", "url" : "https://webrtc.bj2.agoralab.co/webrtc-mirror/src.git@65e8d9facab05de13634d777702b2c93288f8849", "deps_file" : "DEPS", "managed" : False, "safesync_url": "", "custom_deps": { }, }, ] target_os = ["mac"]
其中target_os根据自己的系统选择"linux","Android","ios","mac"
(二)src/third_party目录不存在
创建就行,注意所属目录和你执行gclient sync的用户一致
mkdir -p src/third_party
(三)环境问题(去tmd环境,耽误我好久):It thinks sys.prefix is u'/Library/Frameworks/Python.framework/Versions/2.7' (should be ...)
________ running 'vpython src/build/landmines.py --landmine-scripts src/tools_webrtc/get_landmines.py --src-dir src' in '/Users/liudie/ws/webrtc-proj/webrtc' [E2022-09-27T10:20:26.947067+08:00 97959 0 venv.go:969] Command (cwd=/var/folders/nr/f3mrb__s5hx22gqg6cdknkx80000gn/T/vpython_bootstrap629862980/packages/virtualenv-15.1.0): [/usr/local/bin/python2.7 -B -E -s virtualenv.py --no-download /Users/liudie/.vpython-root/a3399d] Process output: New python executable in /Users/liudie/.vpython-root/a3399d/bin/python ERROR: The executable /Users/liudie/.vpython-root/a3399d/bin/python is not functioning ERROR: It thinks sys.prefix is u'/Library/Frameworks/Python.framework/Versions/2.7' (should be u'/Users/liudie/.vpython-root/a3399d') ERROR: virtualenv is not compatible with this system or executable
陆陆续续困扰了我好久,看了这篇文章https://blog.csdn.net/weixin_40007016/article/details/118806597。是python多版本环境导致的,所以压根不用管如何处理现有的多版本环境,直接祭出环境管理神器anaconda即可!
1.下载anaconda
https://www.anaconda.com/download/#macos
记得将conda的bin目录加入path中:
export PATH=/Users/liudie/opt/anaconda3/bin:$PATH
2.更新conda
conda update anaconda
3.创建我们需要的python2.7环境即可
conda create -n python27 python=2.7
conda activate python27 #进入环境
conda deactivate #退出环境
4.进入我们的python27环境,正常执行下载、编译、安装即可
date; gclient sync; date
(四)编译问题
gn gen out/Release "--args=is_debug=false"
1.xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
一般是xcode还没有安装导致,即便我们发现存在xcode-select命令,但是实际上是无法使用的,我们需要去重新下载xcode
(1)去官网下载xcode:https://developer.apple.com/download/all/?q=xcode
可能会需要AppID,创建一下即可 https://www.bkqs.com.cn/content/zn269wypy.html
下载需要注意:需要和自己的系统版本号对应(幸亏使用的公司流量,不然哭死.....,下错两次,用了30G)
参考:https://www.codenong.com/js284cde739af1/ 查看版本对应
(2)下载后进行解压,安装即可,注意:需要从下载目录中移动到应用程序目录
(3)需要设置Xcode应用的Locations:Command Line Tools
2.Exception: No 10.12+ SDK found(参考:webRTC之macOS编译过程及问题解决)
(1)先查看自己的SDK版本
xcrun --show-sdk-version
(2)修改.gn文件
vi .gn
(3)还需要修改python脚本/Users/liudie/ws/webrtc-proj/webrtc/src/build/mac/find_sdk.py,否则还是无法找到,因为脚本默认还去去找10.xx
3.使用gn来生成编译脚本(类似cmake,存放了文件编译的先后顺序):gn gen out/Release "--args=is_debug=false"
4.执行ninja -C out/Release,进行编译构建(类似make,执行gn产生的脚本,按照顺序进行执行,生成临时文件、二进制文件,最后进行编译链接,调用了预编译器、编译器、链接器完成编译)
可能出现下面错误:NSURLSession.h:500:168: error: expected ')'
这是最坑的地方,去谷歌搜索,也不能找到有用的信息,一般是让重新安装xcode,或者xcode-select选择版本,于是苦逼的下载多个xcode(几十个G啊,我去),也没有成功
发现调用的SDK全是macOS12.3库下的代码导致,于是去我们下载自己需要的版本,添加到SDKs目录即可
编译webrtc通过了....
(五)修改xcode的内建库macOS12.3变为自己需要的库
我们在前面看到,gn文件里面默认编译版本最小是10.12,所以我们最好下载高于10.12一丢丢的版本就行
下载地点在:https://github.com/YoungSunwh/MacOSX-SDKs
这里我选择MacOSX10.15,下载后进入xcode的SDK目录
cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
将自己的下载的库移动进去,即可
重新执行gn和ninja命令即可!!!
(六)生成ide所需要的工程文件(可忽略)
gn gen --ide=vs out/Release #windows gn gen out/xcode_mac_x64 --args='target_os="mac" target_cpu="x64"' --ide=xcode #mac
查看out/Release下面是否存在all.sln文件或者out/xcode_mac_x64下的all.xcworkspace,存在则安装成功!
完成收工 ,后面可以通过Visual Studio(mac下还是使用xcode)对webrtc源码进行编辑和编译!
(七)xcode打开项目
选择out/xcode_mac_x64下的all.xcworkspace即可