2023年12月21日发(作者:)

一、 前期准备

理论上来讲,要在vs2010上编译OpenVPN,只要用vs新建一个空工程,然后把OpenVPN的源码拖进去编译一下就行了。事实上也是这样的,只不过OpenVPN依赖的东西太多了,比如openssl,lzo等。所以这里首先将它需要的东西准备好。

1. 需要软件包

(假定已经安装好了vs2010)

ActivePerl_ (编译openssl需要)

(编译OpenVPN需要,打包用的)

(编译OpenVPN需要,加解密用的)

2 (编译OpenVPN需要,用于证书,数字签名之类的)

(OpenVPN源码包)

2. 编译openssl

1) 安装ActivePerl_

2) 解压到C盘

3) 启动vs2010的命令行模式(不要直接cmd)

开始菜单->Microsoft Visual Studio 2010->Visual Studio Tools->Visual

Studio 命令提示(2010)

4) 进入openssl目录

D:Program FilesMicrosoft Visual Studio 10.0VC>c:

C:>cd C:openssl-0.9.8g

5) 使用命令msdo_

C:openssl-0.9.8g>msdo_

6) 使用命令nmake -f 生成静态库和动态库

C:openssl-0.9.8g>nmake -f

当这个命令执行完成后,会在C:/openssl-0.9.8g目录下生成:out32dll,

tmp32dll, inc32三个目录。

out32dll:是存储的是生成的动态,静态库,后面生成OpenVPN时候需要这些库支持( )

tmp32dll:是存储的是编译过程中生成的目标文件

inc32: 是头文件哈,在开发的时候需要包含的openssl的头文件所在的目录

7) 测试库是否正确,执行命令:

C:/openssl-0.9.8g>nmake -f test

当看到"passed all tests" 出现时,就说明我们生成的库是正确的。

3. 编译lzo

1) 解压到C盘

2) 进入该目录

D:Program FilesMicrosoft Visual Studio 10.0VC>c:

C:>cd C:lzo-2.03

3) 使用命令

C:lzo-2.03>

命令成功执行后会在C:/lzo-2.03目录下生成库

4. 编译pkcs11-helper

1) 解压pkcs11-helper-1.07到C盘

2) 进入该目录的lib文件夹

D:Program FilesMicrosoft Visual Studio 10.0VC>c:

C:>cd C:pkcs11-helper-1.07lib

3) 使用命令nmake -f Makefile.w32-vc OPENSSL=1

OPENSSL_HOME=c:openssl-0.9.8g

C:pkcs11-helper-1.07lib>nmake -f Makefile.w32-vc OPENSSL=1

OPENSSL_HOME=c:/openssl-0.9.8g

若成功,会在C:pkcs11-helper-1.07/lib下生成了和

4) 可能遇到问题,需要作如下操作

A. 打开C:/pkcs11-helper-1.07/lib/pkcs11h-threading.c 文件

第477行

ret = (unsigned)(_data->start (_data->data) - (void*)0);

改为

ret = (unsigned)(_data->start (_data->data));

B. 打开C:/pkcs11-helper-1.07/lib/Makefile.w32-vc 文件

!ifdef OPENSSL

OPENSSL_STATIC =

#OPENSSL_STATIC =

OPENSSL_DYNAMIC =

#OPENSSL_DYNAMIC =

改为

!ifdef OPENSSL

OPENSSL_STATIC = C://openssl-0.9.8g//out32dll//

#OPENSSL_STATIC =

OPENSSL_DYNAMIC = C://openssl-0.9.8g//out32dll//

#OPENSSL_DYNAMIC =

二、 使用Visual Studio 2010编译OpenVPN

(这个步骤不同的版本可能会出现不同的问题,请根据出现的提示Google或百度之。)

1. 新建一个空的win32控制台程序,取名OpenVPN

2. 把openvpn-2.0.9解压到工程目录,文件夹改名为code

3. 把code中所有文件添加到工程

4. 删除config-win32.h文件中的#include

5. 工程属性->配置属性->常规->项目默认值->字符集 改为:使用多元字节符集

6. 工程属性->配置属性->VC++ 目录->包含目录 添加如下几个

C:pkcs11-helper-1.07include

C:lzo-2.03include

C:openssl-0.9.8ginc32

7. 工程属性->配置属性->链接库->附加库目录 添加如下几个

C:pkcs11-helper-1.07lib

C:lzo-2.03

C:openssl-0.9.8gout32dll

8. 工程属性->配置属性->链接库->输入->附加依赖性 添加如下几个

Ws2_

9. 工程属性->配置属性->链接库->输入->忽略特定默认库 添加如下几个