webrtc 編譯速成 2023年4月17日

2021-09-19 03:40:05 字數 4058 閱讀 3417

編譯過多次,或多或少都會遇到相同問題,好記憶不如爛筆頭,今天動手。。。

文章結構部分照抄別人的,根據自已的步驟稍做修改。

win10,64位

visual studio 2017最新版本

編譯過程中需要,我用的2.7.9版本,需新增到path環境變數。

如果安裝出錯,參考:安裝directx sdk時出現error code:s1023 的解決方案

參照官方文件 

前期準備工作,少不了**,配置環境變數

set depot_tools_update=0 #不更新depot_tools

set depot_tools_win_toolchain=0 #編譯時使用本機vs工具鏈

set gyp_msvs_version=2017 #指定vs版本

set gyp_msvs_override_path=「c:\program files (x86)\microsoft visual studio\2017\community #vs安裝路徑,替換成自己的

set gyp_generators=msvs-ninja,ninja #使用ninja編譯

cd depot_tools
./gclient
根據官方文件

mkdir webrtc-checkout

cd webrtc-checkout

fetch --nohooks webrtc

gclient sync

如果**配置有問題,這其中會有報錯

工具gn.exe:位於webrtc-checkout\src\win,這就是為什麼在生成vs解決方案工程的時候提示找不到gn.exe

clang-format.exe:位於webrtc-checkout\src\buildtools\win

isolate.exe:位於webrtc-checkout\src\tools\luci-go\win64

資源位於webrtc-checkout\src\resources

這裡工具比資源重要,有同學可能想到了去其他地方拷貝,但這是下策,因為上面列舉工具和資源是我所知缺少的,至於是否還缺少其他的,我並不知道。

解決方法:執行gclient runhooks(執行一次hook操作),或者執行gclient sync --force(此命令會自動

右,這就是為什麼要確保購買的vps至少有20g流量

cd webrtc-checkout\src

git branch -r #檢視release分支

最新的release分支已經到m74了,然後切換到目標分支並打上標籤。

git checkout -b my_branch refs/remotes/branch-heads/m74

gclient sync

解決方法:新建乙個檔案,http_proxy.boto,放在任意位置,我放到了d:\git\depot_tools中,檔案內容如下:

[boto]

proxy=127.0.0.1

proxy_port = 1080

系統環境變數配置:no_auth_boto_config=d:\git\depot_tools\http_proxy.boto

我個人是喜歡用vs工 程編譯,so...

ps:預設編譯出來是mt or mtd,如果需要編譯md or mdd,起飛=> 修改runtimelibrary型別

//下面一條指令生成vs2017的win32 debug工程

gn gen out/debug --ide=vs2017 --args="is_debug=true target_cpu=\"x86\""

//下面一條指令生成vs2015的win32 release工程

gn gen out/release --ide=vs2017 --args="is_debug=false target_cpu=\"x86\""

//以上方法均建議使用ninja方法編譯,速度快

ninja -c out/debug

//或者

ninja -c out/release

為了讓自己編譯出來的webrtc庫能夠被自己的vs工程使用關鍵是gn生成工程檔案的地方。

webrtc預設的編譯器是clang. 通過她編譯出來的lib有時候我們的vs工程用不了會報如下錯誤:

webrtc.lib : fatal error lnk1136: invalid or corrupt file(只是舉個例子)

所以在使用gn生成工程檔案的時候需要帶上  「is_clang=false 」 這樣的引數。例如:

gn gen out/debug --ide=vs2017 --args="is_debug=true target_cpu=\"x86\" is_clang=false"
去掉單元測試的命令

gn gen --ide=vs out/debug --args="target_winuwp_version=\"8.1\" target_winuwp_family=\"desktop\" use_rtti=true is_clang=false libyuv_include_tests=false rtc_include_tests=false libyuv_include_tests=true rtc_use_h264=true"
4.編譯後庫檔案太散,自動整理指令碼

注:  指令碼應當在webrtc的webrtc目錄的上一級目錄執行 這樣才能對應標頭檔案中的相對路徑關係.

linux cp命令加上parents引數時,可以保持目錄結構

指令碼放在src同級目錄,會在當前目錄生成 inc和lib兩個資料夾

#!/bin/bash

echo $src

echo do teminc

src=`find src/ -name "*.h"`

mkdir teminc

for obj in $src

do #echo "cp header file $obj"

cp --parents $obj teminc/

done

mv ./teminc/src ./inc

rm -rf teminc

echo do lib

mkdir lib

echo do lib debug

cd lib

mkdir debug

cd ..

src=`find src/out/debug/ -name "*.lib"`

for obj in $src

do #echo "cp header file $obj"

cp $obj lib/debug/

done

echo do lib release

cd lib

mkdir release

cd ..

src=`find src/out/release/ -name "*.lib*"`

for obj in $src

do #echo "cp header file $obj"

cp $obj lib/release/

done

乙個簡單的指令碼即可以提取出頭檔案,這個方法同樣適用於提取任意工程的指定型別檔案.

開啟vs developer command 控制台

cd lib/debug

lib.exe /out:libwebrtc.lib *.lib

cd ..

cd lib/release

lib.exe /out:libwebrtc.lib *.lib

應用webrtc庫需要的巨集一般只有三個:nominmax  win32_lean_and_mean webrtc_win

webrtc交叉編譯

目標 實現webrtc到nanopi上的移植 思路 linux pc機 上進行交叉編譯移植到nanopi上 以下操作是基於pc機上的編譯環境已安裝並且成功編譯過x64linux的webrtc 步驟 進入到src目錄執行 2.構建專案 gn gen out default args target os...

webrtc原始碼編譯

一 編譯所需工具 2.python,建議安裝python2.6 安裝之後,將安裝路徑設定在環境變數path中。在安裝了tortoisesvn msysgit之後,通過cmd命令進入dos介面,在介面輸入 svn check 4.directx sdk 5.windows sdk 7.1 安裝路徑需要...

webrtc編譯注意

depot tools環境變數 path中增加g google depot tools windows kits目錄 set windowssdkdir d windows kits 10 工具鏈相關 set depot tools win toolchain 0 set gyp generator...