教你用VS2019+WDK10+OpenVPИ-build完美编译OpenVPИ 2.5
编译OpenVPИ 2.5
- 写在前面
- 非常重要:需要64位操作系统才能完成编译!
- 环境搭建
- 前期准备
- 安装VS1029
- 安装WDK 10
- 安装ActivePerl
- 编译OpenVPИ 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
- 安装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。
- 我的(已包含所需源文件包):
- OpenVPИ-build-master-2.5: 下载地址
- GitHub(不包含源文件包,编译时自动下载):
- OpenVPИ-build-master: 下载地址
注意:解压时路径不要有中文或者空格。
解压以后有这些文件,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还可以设置编译模式,选择只编译openvpn或者只编译依赖项,默认是都编译。各位可根据自己的需要选择。
只编译OpenVPИ:
set MODE=OPENVPN&& build.bat
只编译依赖项:
set MODE=DEPS&& build.bat
- 定位到build.bat所在目录,输入
build
,然后回车。
build
如果之前的临时文件还在,会提示是否需要覆盖,可根据自己的情况选择。如果改过源文件最好选择跳过(输入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。
教你用VS2019+WDK10+OpenVPИ-build完美编译OpenVPИ 2.5相关推荐
- vs2019+wdk10开发 xp, win7, win10 驱动
一.安装WDK10 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk 首先下载wdk10,并安装,安 ...
- VS2019+WDK10编写xp平台的驱动
VS2019+WDK10编写xp平台的驱动 之前自己在网上找了一堆教程,各种配置一大堆都没有成功,但是都没成功. 如何配置直接贴张图,其实非常非常简单.
- 001:VS2019+WDK10+Win10 驱动开发环境
参考以下两篇文章: Download the Windows Driver Kit (WDK) - Windows drivers | Microsoft Learn <VS2019+WDK10 ...
- Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)
1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...
- build.xml编译报错Specified VM install not found: type Standard VM, name jdk1.7.0_45
build.xml编译打包时报错: 解决方法: build.xml -- 右键 -- Run As -- External Tools Configuration 在这个页面的顶端就会看到有红叉 ...
- Open Harmony移植:build lite编译构建过程
本文分享自华为云社区<移植案例与原理 - build lite编译构建过程>,作者: zhushy. 配置完毕产品解决方案.芯片开发板解决方案,就可以执行 hb build进行编译.但是产 ...
- vs+cmake完美编译RTS游戏,类似魔兽争霸源码
网上的一个RTS游戏,网上的代码比较老,不能直接编译.这个仓库是我整理编译通过的.代码版权归于原作者. 源码下载 vs+cmake完美编译RTS游戏,类似魔兽争霸源码下载-其他文档类资源-CSDN文库 ...
- LASlib在VS2010平台下的完美编译
LASlib在VS2010平台下的完美编译 1. 简要介绍 LASlib是进行点云数据读写的理想工具,由北卡计算机学院的Martine isenburg编写.基于该开源库,作者同时开发了LASTool ...
- java游戏刀剑_Game_rc 刀剑无双服务端后端源代码,完美编译运行,javawanmeiyunxing Engine 游戏引擎 267万源代码下载- www.pudn.com...
文件名称: Game_rc下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 8214 KB 上传时间: 2016-12-01 下载次数: 0 提 供 者: 王文文 ...
最新文章
- powershell连接数据库_PowerShell 连接SQL Server 数据库
- 数据分析惯用的5种思维方法
- 如何解决多地开视频会议直播问题?
- Spark安装与学习
- 性能优化18招提速宝典
- 爬虫小案例:基于Bing关键词批量下载图片(第二版)
- python入门-廖雪峰 Python教程
- zabbix系列(八)zabbix添加对web页面url的状态监控
- lateX 编译中文_LaTeX | 为学术论文排版而生【入门篇】
- VMware 安装提示缺少MicrosoftRuntime DLL 问题解决办法
- ElasticSearch相似性度量
- 挂载报错:“/dev/vda1 is apparently in use by the system;”
- 微信小程序经典开源代码汇总
- 大型网站技术架构 读书笔记 (二) 大型网站架构模式
- Android Adb命令恢复出厂设置
- Spell of the rising moon
- 【react】---redux-actions的基本使用---【巷子】
- 服务器pg信号指的是什么信号,什么是PG信号?PG信号是怎么形成的?PG信号的作用?...
- Y Combinator Is Boot Camp for Startups
- R 语言 state 数据集的可视化
热门文章
- mysql 生成流水号 存储过程 订单编号
- Windows 10英文系统解决中文乱码问题
- 神经网络——MLP(多层感知机)和RBF(径向基函数神经网络)
- DragGAN:interactive point-based manipulation on the generative image manifold
- java计算机毕业设计校园招聘管理系统源码+mysql数据库+lw文档+系统+调试部署
- Win10配置IIS与 C#/.net项目的发布与IIS部署
- 51单片机ADD,ADDC与SUBB指令详细分析
- 大学物理实验报告 -- 分光计的使用和三棱镜折射率的测定
- 应广单片机PMC150/PMS150
- Three.js物体绕轴心旋转