使用VS2019和WDK10編譯OpenVPM 2.5

寫在前面

轉載請註明作者和出處。

本文的目的不是介紹OpenVPИ的使用(也不會介紹),而是講解如何編譯,需要使用OpenVPИ而不關心如何編譯的可以去下載現成的安裝包安裝使用。截止2019年7月GitHub上的OpenVPИ(源代碼)最新版是2.5,而OpenVPИ社區公開發布的安裝包最新版是2.4.7。

之前看過其他人寫的教程,要麼弄起來很複雜需要改很多源代碼,要麼OpenVPИ版本太老沒有多少參考價值,要麼編譯出來的東西不能運行,即使完全照做也不一定能成功。於是自己花了點時間研究OpenVPИ的編譯,終於找到一個比較好的辦法,可以完美編譯OpenVPИ 2.5。爲了記錄下整個過程,我又專門把環境重新部署了一遍,復現了三遍,最終整理成一篇完整的教程發上來給需要的人蔘考,可以少走不少彎路。

非常重要:需要64位操作系統才能完成編譯!

環境搭建

前期準備

下載VS2019: Visual Studio 2019.
下載WDK10: 適用於 Windows 10 版本 1903 的 WDK(10.0.18362.1).
下載ActivePerl:ActivePerl-5.28.1.2801-MSWin32-x64-24563874.exe

安裝VS1029

  1. 安裝VS2019,社區版、專業版、企業版都可以,截止2019年7月最新版是16.1.5,可以和舊版VS共存,不需要卸載舊版本。(注意:離線安裝需先導入證書)
    啓動VS安裝
    正在安裝Installer
  2. 在工作負載界面,勾選使用C++的桌面開發
    選擇開發環境
  3. 切換到單個組件界面,勾選以下組件:
單個組件
Windows 10 SDK(10.0.18362.0)(後面會解釋爲啥要選它)
MSVC v142 - VS 2019 C++ x64/x86 Spectre緩解庫(v14.21)
Python 2 64-bit(2.7.16)
選擇SDK
選擇單個組件
  1. 其他組件根據自己的需要來選,然後點安裝。
    VS提示重啓
  2. 如果提示重啓系統,就重啓。如果沒有提示重啓,那麼經過短暫的等待就可以看到VS2019的啓動界面了,安裝成功!
    VS安裝完畢
  3. 點右上角的×關閉VS。

安裝WDK 10

  1. 運行wdksetup.exe,安裝Windows Driver Kit 10.0.18362.1(支持Win10 1903)。
    特別要說明的是,Windows Driver Kit的版本需要與Windows SDK的版本對應,而且Windows Driver Kit帶的插件還要支持VS2019,於是我就下載了最新的18362,省得麻煩,所以安裝VS2019時要勾選SDK 10.0.18362.0。
    這裏不得不吐槽一下微軟,WDK 10.0.17134.1和10.0.18362.1的安裝程序名一樣,VS2017和VS2019的離線工具文件名也一樣,我先下載了VS2017和WDK 10.0.17134.1,然後再下載VS2019和WDK 10.0.18362.1一下就把我整蒙了。
    WDK安裝程序沒標版本號,都叫wdksetup.exe,打開以後才知道是哪個版本。
    VS更是蛋疼,請看:
    VS安裝包比較
    這麼長的一串數字完全一樣,我直接懷疑下載錯了,又上VS官網反覆確認。不得不說阿三的思路很清奇。
    好了,繼續,看安裝界面,兩個選項:第一項是在線安裝,第二項是下載後再安裝,建議選第二項以防安裝不成功又要重新在線安裝。
    開始安裝WDK10
    WDK10安裝完畢
  2. 安裝的中間過程就跳過不說了,結束時會出現安裝Windows Driver Kit Visual Studio插件的提示,點擊Close開始安裝插件。
    開始安裝插件
  3. 離線安裝時會提示數字簽名無效,不用管,繼續。
    數字簽名無效
  4. 如果提示要等待進程結束,有耐心就多等一會,可能前面的安裝任務還在收尾,沒耐心就直接點End Tasks。
    EndTasks
  5. 完成VS插件安裝。
    插件安裝完畢

安裝ActivePerl

  1. 運行ActivePerl-5.28.1.2801-MSWin32-x64-24563874.exe啓動安裝。
    安裝ActivePerl
  2. 選Typical就可以。在這裏插入圖片描述
  3. 下一步默認就行。默認選項
    裝完以後基本的編譯環境就準備好了。
    如果要生成安裝包的話還要安裝NSIS,下載NSIS3.0.4安裝(可選):官網地址.

編譯OpenVPИ 2.5

下面就是編譯OpenVPИ了。

  1. 下載OpenVPИ-build-master。由於原版每次編譯時都要刪除所有臨時文件,然後重新下載、解壓,而且下載很慢還容易失敗,很耽誤事,特別是編譯環境沒準備好或者需要修改部分源文件的時候,很不方便也很不友好,所以我稍稍修改了一下。我修改過的已經包含編譯所需的源文件包(包含lzo-2.06、openssl-1.0.2p、pkcs11-helper-1.11、tap-windows6),編譯時不用再下載,build.bat和build-env.bat也已經改好(其中build.bat.bak和build-env.bat.bak是原版的備份),省事。不放心的朋友也可以從GitHub下載,原版基於VS2017和WDK10.0.17134.1。
我的(已包含所需源文件包):
OpenVPИ-build-master-2.5:下載地址
GitHub(不包含源文件包,編譯時自動下載):
OpenVPИ-build-master:下載地址

注意:解壓時路徑不要有中文或者空格。

  1. 解壓以後有這些文件,Windows環境下主要用msvc裏面的東西。
    壓縮包目錄

  2. 進入msvc文件夾可以看到有build.bat和build-env.bat
    msvc目錄

  3. 簡單介紹一下這兩個文件的作用,build.bat用來編譯文件,基本不用調整,build-env.bat用來設定編譯環境、依賴項和OpenVPИ版本、渠道。運行build.bat的時候會自動調用build-env.bat,不需要單獨運行build-env.bat,只需要把環境變量配好。

  4. build-env.bat長這樣:
    build-env配置
    不用我多說,相信大部分人都看得懂,裏面可以設置版本、下載地址、來源等。用原版的記得修改VS路徑,把3個2017都改爲2019,其他的根據個人喜好修改,修改好以後保存。

  5. 雙擊build.bat運行一次,就會在msvc文件夾中生成以下目錄(各種報錯不用管),從上往下分別是編譯臨時目錄、下載臨時目錄、最終成果、源文件、解壓工具。
    生成的目錄
    使用原版build.bat編譯的同學可能會遇到下載的壓縮包損壞不能解壓的情況,建議多嘗試幾次。

  6. 需要修改源文件的話,就到build.tmp文件夾裏找對應的文件進行修改。
    build.tmp目錄

  7. 爲配合我自己的軟件,我修改了OpenVPИ-master和tap-windows6-master各自的version.m4配置文件,大家也可根據自己的需要進行修改。只要注意兩個version.m4配置文件中PRODUCT_TAP_WIN_COMPONENT_ID這一項兩邊保持一致就可以了,否則OpenVPИ檢測不到虛擬網卡。
    在這裏插入圖片描述

  8. 編輯好以後記得保存,下面就開始編譯了,從開始菜單找到Developer Command Prompt for VS 2019,打開。
    找到VS Command
    啓動VS Command
    使用原版build.bat的同學要注意了,如果你修改過源文件或配置文件,請務必編輯build.bat刪除CleanUp後面那幾行,否則你剛纔的辛勞付出就要打水漂了。
    build.bat還可以設置編譯模式,選擇只編譯openvp或者只編譯依賴項,默認是都編譯。各位可根據自己的需要選擇。

只編譯OpenVPИ:

set MODE=OPENVP&& build.bat
  • 1

只編譯依賴項:

set MODE=DEPS&& build.bat
  • 1
  1. 定位到build.bat所在目錄,輸入build,然後回車。
build
  • 1

提示覆蓋文件
如果之前的臨時文件還在,會提示是否需要覆蓋,可根據自己的情況選擇。如果改過源文件最好選擇跳過(輸入s,回車)。每解壓一個包都會有提示,一路跳過,大概10多次。

  1. 然後就跑起來了,前半段很順暢,後半段就各種報錯,最終失敗。
    報錯編譯失敗
    這是因爲我沒有安裝舊版的Windows SDK 10.0.17134.0,安裝過的同學可能已經編譯完畢。那麼報錯的同學需要再安裝Windows SDK 10.0.17134.0嗎?完全不需要,最便捷的方法是找到OpenVPИ.sln打開,然後升級解決方案。

  2. 打開OpenVPИ.sln升級解決方案。
    升級解決方案

  3. 點確定開始升級,升級完後點擊全部保存,關閉VS2019(升級後也可以在VS2019裏編譯)。

  4. 調出Developer Command Prompt for VS 2019繼續build。提示覆蓋文件,仍然選擇一路跳過。
    黃色警告
    這次運行的話,基本就沒什麼問題了,窗口裏面有花花綠綠的輸出,大多是強制類型轉換時產生的警告,無傷大雅。
    編譯成功

  5. 最後跑完顯示SUCCESS就說明大功告成,趕快到msvc\image查看成果吧。
    msvc\image目錄

include裏頭是各種頭文件,可以和庫文件一起放到你自己的項目裏引用。
lib裏頭是生成的庫文件,可以放到自己的項目裏(庫文件下載下載鏈接)。

依賴項
lzo-2.06:lzo2.lib
openssl-1.0.2p:libeay32.lib、ssleay32.lib
pkcs11-helper-1.11:pkcs11-helper-1.11.lib、pkcs11-helper-1.11.dll.lib

ssl裏頭是openssl的運行配置文件(示例)。
bin裏頭是OpenVPИ的可執行文件和它運行所需的動態鏈接庫,是最終成果。
編譯成果
需要注意的是,這些exe都是窗口控制檯程序,雙擊它只會一閃而過,但它是可以正常使用的(具體用法不在本文討論範圍)。如果要拷貝到別的電腦上使用,則需要安裝Visual C++ 2019 Redistributable運行庫。
當然,想要有界面也是可以的,和它搭配是OpenVPИ-GUI,可以到GitHub下載編譯也可以安裝OpenVPИ獲取(社區未提供單獨下載)。

OpenVPИ程序需要搭配Tap-Windows虛擬網卡使用,如果之前更改了version.m4配置文件中PRODUCT_TAP_WIN_COMPONENT_ID的值,那麼你就需要單獨修改編譯Tap-Windows6,否則你的OpenVPИ將檢測不到虛擬網卡。

需要單獨修改、編譯Tap-Windows6的,請參考我的另一篇文章:
從零開始用VS2019+WDK10搭建環境編譯Tap-Windows6(9.23.3.601)(NDIS6)直達鏈接

其他已知的問題

中文亂碼,不能正常顯示。有能力的小夥伴可以嘗試修復這個bug。

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet">
                            </div>
</article>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章