使用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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章