1. 程式人生 > >在Windows下編譯WebRTC

在Windows下編譯WebRTC

obj 自己 war invalid bds amd clu out tail

前言

這篇文章的目的在於為你節省生命中寶貴的10小時(甚至更多),或者浪費你10分鐘。作為Google更新頻繁的大型跨平臺基礎庫,WebRTC的編譯一直被人稱為噩夢。如果恰巧你偏要在Windows下編譯WebRTC,那麽你最好提前對自己的耐心做充分的評估。

截止目前,我嘗試過中文博客社區裏幾乎所有的文章,可以說全部失效了。我不知道這篇文章的有效期有多久,因為webrtc.org社區的家夥們更新實在太勤奮了!

環境

OS:Microsoft Windows 7 Ultimate 6.1.7601 Service Pack 1 Build 7601

你只需要一臺Win7 64機器即可,其他一概用WebRTC提供的就行。如果使用WebRTC自帶的編譯工具鏈的話,宿主機器已安裝的Python和VS等等與WebRTC可以做到毫不相關,請不要被某些文章蒙蔽。

打開VPN

原因你懂的。推薦挑一個快點的TW或JP節點,保持網絡通暢。

安裝depot_tools

使用SVN checkout

  1. http://src.chromium.org/svn/trunk/tools/depot_tools

然後運行depot_tools\gclient.bat,這個腳本會觸發檢測邏輯,自動下載python276_bin和git-1.9.0.chromium.6_bin。

至此,我假設depot_tools已經安裝完畢。如果沒有,請關閉這個頁面,然後自行Google。

檢出WebRTC代碼

建立一個文件夾,名叫WebRTC,然後新建一個bat腳本,寫入:

  1. set PATH=[你的depot_tools路徑,比如C:\depot_tools];%PATH%
  2. call gclient.bat config --name src http://webrtc.googlecode.com/svn/trunk
  3. call gclient.bat sync --force
  4. set GYP_GENERATORS=msvs
  5. call python src/webrtc/build/gyp_webrtc -G msvs_version=2013

保存,然後雙擊執行。接著是漫長的等待,10MB寬帶的情況下我等了3個小時。期間控制臺會一直顯示still working on src,事實上,這時有幾個G的東西等待下載。官網的說明夠迷惑人的,這個腳本應該最大程度上簡化了問題。

註意,腳本中最後一句的意思是生成VS的編譯文件(.sln),這會觸發gclient自動下載vs2013 express版的核心文件,所以不需要宿主機器上原先安裝的VS。

腳本運行完畢後,src目錄下應該出現了許多文件和目錄,其中就有all.sln。

編譯

下載DirectX開發包

DirectX SDK June 2010 http://www.microsoft.com/en-us/download/details.aspx?id=6812 ,解壓備用。

使用VS2013編譯(不推薦)

直接雙擊all.sln打開,為每一個子模塊添加include:DXSDK\Include和library:DXSDK\Lib;depot_tools\win_toolchain\vs2013_files\wdk\lib\Atl\amd64 。

由於模塊非常非常多,所以不推薦。

使用Ninja編譯

Ninja是Chromium社區開發的一套build system,不要害怕陌生的Ninja,很快你就會愛上它,並且對VS心生厭倦。

編譯前依然要搞定DirectX SDK,這次直接將DXSDK\Include復制到depot_tools\win_toolchain\vs2013_files\VC\include,DXSDK\Lib復制到depot_tools\win_toolchain\vs2013_files\VC\lib。這麽做簡單粗暴,方便高效。

使用Ninja編譯的話,我也提供一個方便的腳本:

  1. @Echo Off
  2. :: hankcs
  3. title Hankcs‘s program
  4. CD\
  5. %~d0
  6. CD %~dp0
  7. set PATH=[你的depot_tools路徑,比如C:\depot_tools];%PATH%
  8. del ninjia.log
  9. ninja -C out/Release >> ninjia.log

保存為bat,放到WebRTC\src目錄下執行。

如果遇到了類似下面的錯誤:

  1. error c2220: warning treated as error - no ‘object‘ file generated
  2. ...
  3. ‘utf8‘ codec can‘t decode byte 0xd1 in position 0: invalid continuation byte

請在控制面板中修改語言為下圖所示:

技術分享

然後再次運行,你會發現error c2220神奇地消失了。

運行

一切順利的話,WebRTC\src\out下會出現四個文件夾,如圖所示

技術分享

說明編譯成功。

編譯完了之後我想說,他娘的編譯一下就這麽麻煩,做這玩意得多難啊,人與人的差距真他娘大。

Reference

http://www.webrtc.org/reference/getting-started

http://egamesir.blog.163.com/blog/static/188096088201362411524585/

http://blog.csdn.net/choday/article/details/19978427

在Windows下編譯WebRTC