写在前面
转载请注明作者和出处。
本文的目的不是介绍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
- 安装VS2019,社区版、专业版、企业版都可以,截止2019年7月最新版是16.1.5,可以和旧版VS共存,不需要卸载旧版本。(注意:离线安装需先导入证书)
- 在工作负载界面,勾选使用C++的桌面开发
- 切换到单个组件界面,勾选以下组件:
- 单个组件
- Windows 10 SDK(10.0.18362.0)(后面会解释为啥要选它)
- MSVC v142 - VS 2019 C++ x64/x86 Spectre缓解库(v14.21)
- Python 2 64-bit(2.7.16)
- 其他组件根据自己的需要来选,然后点安装。
- 如果提示重启系统,就重启。如果没有提示重启,那么经过短暂的等待就可以看到VS2019的启动界面了,安装成功!
- 点右上角的×关闭VS。
安装WDK 10
- 运行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官网反复确认。不得不说阿三的思路很清奇。
好了,继续,看安装界面,两个选项:第一项是在线安装,第二项是下载后再安装,建议选第二项以防安装不成功又要重新在线安装。
- 安装的中间过程就跳过不说了,结束时会出现安装Windows Driver Kit Visual Studio插件的提示,点击Close开始安装插件。
- 离线安装时会提示数字签名无效,不用管,继续。
- 如果提示要等待进程结束,有耐心就多等一会,可能前面的安装任务还在收尾,没耐心就直接点End Tasks。
- 完成VS插件安装。
安装ActivePerl
- 运行ActivePerl-5.28.1.2801-MSWin32-x64-24563874.exe启动安装。
- 选Typical就可以。
- 下一步默认就行。
装完以后基本的编译环境就准备好了。
如果要生成安装包的话还要安装NSIS,下载NSIS3.0.4安装(可选):官网地址.
编译OpenVPИ 2.5
下面就是编译OpenVPИ了。
- 下载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。
注意:解压时路径不要有中文或者空格。
-
解压以后有这些文件,Windows环境下主要用msvc里面的东西。
-
进入msvc文件夹可以看到有build.bat和build-env.bat
-
简单介绍一下这两个文件的作用,build.bat用来编译文件,基本不用调整,build-env.bat用来设定编译环境、依赖项和OpenVPИ版本、渠道。运行build.bat的时候会自动调用build-env.bat,不需要单独运行build-env.bat,只需要把环境变量配好。
-
build-env.bat长这样:
不用我多说,相信大部分人都看得懂,里面可以设置版本、下载地址、来源等。用原版的记得修改VS路径,把3个2017都改为2019,其他的根据个人喜好修改,修改好以后保存。 -
双击build.bat运行一次,就会在msvc文件夹中生成以下目录(各种报错不用管),从上往下分别是编译临时目录、下载临时目录、最终成果、源文件、解压工具。
使用原版build.bat编译的同学可能会遇到下载的压缩包损坏不能解压的情况,建议多尝试几次。 -
需要修改源文件的话,就到build.tmp文件夹里找对应的文件进行修改。
-
为配合我自己的软件,我修改了OpenVPИ-master和tap-windows6-master各自的version.m4配置文件,大家也可根据自己的需要进行修改。只要注意两个version.m4配置文件中PRODUCT_TAP_WIN_COMPONENT_ID这一项两边保持一致就可以了,否则OpenVPИ检测不到虚拟网卡。
-
编辑好以后记得保存,下面就开始编译了,从开始菜单找到Developer Command Prompt for VS 2019,打开。
使用原版build.bat的同学要注意了,如果你修改过源文件或配置文件,请务必编辑build.bat删除CleanUp后面那几行,否则你刚才的辛劳付出就要打水漂了。
build.bat还可以设置编译模式,选择只编译openvp或者只编译依赖项,默认是都编译。各位可根据自己的需要选择。
只编译OpenVPИ:
set MODE=OPENVP&& build.bat
- 1
只编译依赖项:
set MODE=DEPS&& build.bat
- 1
- 定位到build.bat所在目录,输入
build
,然后回车。
build
- 1
如果之前的临时文件还在,会提示是否需要覆盖,可根据自己的情况选择。如果改过源文件最好选择跳过(输入s,回车)。每解压一个包都会有提示,一路跳过,大概10多次。
-
然后就跑起来了,前半段很顺畅,后半段就各种报错,最终失败。
这是因为我没有安装旧版的Windows SDK 10.0.17134.0,安装过的同学可能已经编译完毕。那么报错的同学需要再安装Windows SDK 10.0.17134.0吗?完全不需要,最便捷的方法是找到OpenVPИ.sln打开,然后升级解决方案。 -
打开OpenVPИ.sln升级解决方案。
-
点确定开始升级,升级完后点击全部保存,关闭VS2019(升级后也可以在VS2019里编译)。
-
调出Developer Command Prompt for VS 2019继续build。提示复盖文件,仍然选择一路跳过。
这次运行的话,基本就没什么问题了,窗口里面有花花绿绿的输出,大多是强制类型转换时产生的警告,无伤大雅。
-
最后跑完显示SUCCESS就说明大功告成,赶快到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>