编译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

  1. 安装VS2019,社区版、专业版、企业版都可以,截止2019年7月最新版是16.1.5,可以和旧版VS共存,不需要卸载旧版本。(注意:离线安装需先导入证书)

  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)

  1. 其他组件根据自己的需要来选,然后点安装。
  2. 如果提示重启系统,就重启。如果没有提示重启,那么经过短暂的等待就可以看到VS2019的启动界面了,安装成功!
  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官网反复确认。不得不说阿三的思路很清奇。
    好了,继续,看安装界面,两个选项:第一项是在线安装,第二项是下载后再安装,建议选第二项以防安装不成功又要重新在线安装。

  2. 安装的中间过程就跳过不说了,结束时会出现安装Windows Driver Kit Visual Studio插件的提示,点击Close开始安装插件。
  3. 离线安装时会提示数字签名无效,不用管,继续。
  4. 如果提示要等待进程结束,有耐心就多等一会,可能前面的安装任务还在收尾,没耐心就直接点End Tasks。
  5. 完成VS插件安装。

安装ActivePerl

  1. 运行ActivePerl-5.28.1.2801-MSWin32-x64-24563874.exe启动安装。
  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

  3. 简单介绍一下这两个文件的作用,build.bat用来编译文件,基本不用调整,build-env.bat用来设定编译环境、依赖项和OpenVPИ版本、渠道。运行build.bat的时候会自动调用build-env.bat,不需要单独运行build-env.bat,只需要把环境变量配好。

  4. build-env.bat长这样:

    不用我多说,相信大部分人都看得懂,里面可以设置版本、下载地址、来源等。用原版的记得修改VS路径,把3个2017都改为2019,其他的根据个人喜好修改,修改好以后保存。

  5. 双击build.bat运行一次,就会在msvc文件夹中生成以下目录(各种报错不用管),从上往下分别是编译临时目录、下载临时目录、最终成果、源文件、解压工具。

    使用原版build.bat编译的同学可能会遇到下载的压缩包损坏不能解压的情况,建议多尝试几次。

  6. 需要修改源文件的话,就到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,打开。


    使用原版build.bat的同学要注意了,如果你修改过源文件或配置文件,请务必编辑build.bat删除CleanUp后面那几行,否则你刚才的辛劳付出就要打水漂了。
    build.bat还可以设置编译模式,选择只编译openvpn或者只编译依赖项,默认是都编译。各位可根据自己的需要选择。

只编译OpenVPИ:

set MODE=OPENVPN&& build.bat

只编译依赖项:

set MODE=DEPS&& build.bat
  1. 定位到build.bat所在目录,输入build,然后回车。
build


如果之前的临时文件还在,会提示是否需要覆盖,可根据自己的情况选择。如果改过源文件最好选择跳过(输入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查看成果吧。

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相关推荐

  1. vs2019+wdk10开发 xp, win7, win10 驱动

    一.安装WDK10 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk 首先下载wdk10,并安装,安 ...

  2. VS2019+WDK10编写xp平台的驱动

    VS2019+WDK10编写xp平台的驱动 之前自己在网上找了一堆教程,各种配置一大堆都没有成功,但是都没成功. 如何配置直接贴张图,其实非常非常简单.

  3. 001:VS2019+WDK10+Win10 驱动开发环境

    参考以下两篇文章: Download the Windows Driver Kit (WDK) - Windows drivers | Microsoft Learn <VS2019+WDK10 ...

  4. Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)

    1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...

  5. build.xml编译报错Specified VM install not found: type Standard VM, name jdk1.7.0_45

    build.xml编译打包时报错: 解决方法: build.xml  --  右键 --  Run As -- External Tools Configuration 在这个页面的顶端就会看到有红叉 ...

  6. Open Harmony移植:build lite编译构建过程

    本文分享自华为云社区<移植案例与原理 - build lite编译构建过程>,作者: zhushy. 配置完毕产品解决方案.芯片开发板解决方案,就可以执行 hb build进行编译.但是产 ...

  7. vs+cmake完美编译RTS游戏,类似魔兽争霸源码

    网上的一个RTS游戏,网上的代码比较老,不能直接编译.这个仓库是我整理编译通过的.代码版权归于原作者. 源码下载 vs+cmake完美编译RTS游戏,类似魔兽争霸源码下载-其他文档类资源-CSDN文库 ...

  8. LASlib在VS2010平台下的完美编译

    LASlib在VS2010平台下的完美编译 1. 简要介绍 LASlib是进行点云数据读写的理想工具,由北卡计算机学院的Martine isenburg编写.基于该开源库,作者同时开发了LASTool ...

  9. java游戏刀剑_Game_rc 刀剑无双服务端后端源代码,完美编译运行,javawanmeiyunxing Engine 游戏引擎 267万源代码下载- www.pudn.com...

    文件名称: Game_rc下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 8214 KB 上传时间: 2016-12-01 下载次数: 0 提 供 者: 王文文 ...

最新文章

  1. powershell连接数据库_PowerShell 连接SQL Server 数据库
  2. 数据分析惯用的5种思维方法
  3. 如何解决多地开视频会议直播问题?
  4. Spark安装与学习
  5. 性能优化18招提速宝典
  6. 爬虫小案例:基于Bing关键词批量下载图片(第二版)
  7. python入门-廖雪峰 Python教程
  8. zabbix系列(八)zabbix添加对web页面url的状态监控
  9. lateX 编译中文_LaTeX | 为学术论文排版而生【入门篇】
  10. VMware 安装提示缺少MicrosoftRuntime DLL 问题解决办法
  11. ElasticSearch相似性度量
  12. 挂载报错:“/dev/vda1 is apparently in use by the system;”
  13. 微信小程序经典开源代码汇总
  14. 大型网站技术架构 读书笔记 (二) 大型网站架构模式
  15. Android Adb命令恢复出厂设置
  16. Spell of the rising moon
  17. 【react】---redux-actions的基本使用---【巷子】
  18. 服务器pg信号指的是什么信号,什么是PG信号?PG信号是怎么形成的?PG信号的作用?...
  19. Y Combinator Is Boot Camp for Startups
  20. R 语言 state 数据集的可视化

热门文章

  1. mysql 生成流水号 存储过程 订单编号
  2. Windows 10英文系统解决中文乱码问题
  3. 神经网络——MLP(多层感知机)和RBF(径向基函数神经网络)
  4. DragGAN:interactive point-based manipulation on the generative image manifold
  5. java计算机毕业设计校园招聘管理系统源码+mysql数据库+lw文档+系统+调试部署
  6. Win10配置IIS与 C#/.net项目的发布与IIS部署
  7. 51单片机ADD,ADDC与SUBB指令详细分析
  8. 大学物理实验报告 -- 分光计的使用和三棱镜折射率的测定
  9. 应广单片机PMC150/PMS150
  10. Three.js物体绕轴心旋转