rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 应用技术 » VPN

VC编译openvpn

1)编译环境 VC 2008 Express 或者更高版本 Windows SDK 6.1 或者更高版本 ActivePerl 5.8 或者更高版本
软件包 lzo-2.03 http://www.oberhumer.com/opensource/lzo/ openssl-0.9.8k http://www.openssl.org/ pkcs11-helper-1.07 http://www.opensc-project.org/pkcs11-helper/ openvpn-2.1.1 http://openvpn.net/ 2)编译并且运行测试程序 lzo >cd lzo-2.03 >B\win32\vc.bat >lzotest -mlzo configure 3)编译OpenSSL     NASM可以从官方下载我直接解压缩到C:\NASM-0.98.39,openssl解压到C:\openssl-0.9.8e,ActivePerl安装到C:\Perl。   注意事项: 首先在环境变量path中增加了C:\Perl\bin;c:\NASM-0.98.39;D:\Microsoft Visual Studio\VC98\Bin;D:\Microsoft Visual Studio\Common\MSDev98\Bin 添加完毕就不会出现诸如perl、nmake命令无效之类的问题了。如"NMAKE : fatal error U1077: 'ml' : return code '0x1' Stop."之类。 另外在编译过程中会出现不能打开包含文件的错误,如"fatal error c1083:cannot open include file 'windows.h',no such file file or directory",为此层尝试修改过系统变量的path,无效,最终的解决办法很简单,将所有需要的直接拷贝到openssl-0.9.8e文件夹下就可以了,为了方便我直接将D:\Microsoft Visual Studio\VC98\Include下和D:\Microsoft Visual Studio\VC98\Lib下的所有文件拷贝到了c:\openssl-0.9.8e下,嘿嘿。   准备完毕就可以开始了:)   开始编译: 开始:) 步骤・1:perl Configure VC-WIN32 --prefix=c:/some/openssl/dir   其中c:/some/openssl/dir是你要安装openssl的目标文件夹。 步骤・2:ms\do_nasm 步骤・3:nmake -f ms\ntdll.mak 步骤・4:nmake -f ms\ntdll.mak test 步骤・5:nmake -f ms\ntdll.mak install ok 编译安装结束 ,在out32dll目录下,会有四个文件libeay32.dll libeay32.lib ssleay32.dll和 ssleay32.lib 4)编译lzo     将lzo解压至C盘根目录,在命令行中跳至该目录,运行b\win32\mc120.bat,编译成功后生成lzo.lib  5)编译 pkcs11-helper
>cd lib >nmake -f Makefile.w32-vc OPENSSL=1 OPENSSL_HOME=q:/openvpn/openssl-0.9.8k 编译中你可能会遇到一个错误“pkcs11h-threading.c(477) : error C2036: 'void *' : unknown size” 这是由于pkcs11h-threading.c (477)的  ret = (unsigned)(_data->start (_data->data) - (void*)0); 改成: ret = (unsigned)(_data->start (_data->data)); 我真不觉得计算指针的值有必要用那么复杂,直接类型转换就好了 6)在VC中编译OpenVPN a. 在VC中新建一个名字为OpenVPN的win32 application工程,类型为an empty project。将OpenVPN解压到该工程目录下,将…\OpenVPN目录下的.c文件添加到source files中,将.h文件添加到header files中。     b.将编译成功的lzo.lib libeay32.lib ssleay32.lib添加到工程中,并将libeay32.dll ssleay32.dll拷贝到Debug目录下。     c.将lzo和OpenSSL的两个include目录添加到VC的路径中:C:\lzo-1.08\include C:\openssl-0.9.8\include。设置的方法为,在VC中,选择tools->options,在directories选项卡下添加。     d.将SDK的目录…\Microsoft SDK\Include添加到VC路径中,并将其调整到…\Microsoft Visual Studio\VC98\Include之前。     e.由于创建的是win32 application,需修改默认的调用run-time library的方式,在projects->settings->C/C++,Category选择Code Generation,Use run-time library选择Debug Multithread DLL。     f. 由于创建的是win32 application,默认入口函数是WinMain,而OpenVPN源码的入口函数为openvpn.c中的main函数,需修改设置,以免出现error LNK2001:unresolved external symbol _WinMain@16的错误。 进入project->setting->c/c++,在category中选择preprocessor,在processor definitions中删除_WINDOWS, 添加_CONSOLE;在Project options中将/subsystem:windows.改为/subsystem:console。     g.在config-win32.h中注释掉#include <windows.h>,不然会报重定义错误。//#include "autodefs/defs.h     h.VC中不识别unsigned long long int类型,需改为_int64。     i. 在project->setting->link下的object/library modules中添加ws2_32.lib crypt32.lib 打开  config-win32.h 注意以下几行,原本的预处理宏后面的字符串是不带引号了,vc要求引号,否则编译出错。 #define PACKAGE "openvpn" #define PACKAGE_NAME "OpenVPN" #define PACKAGE_TARNAME "openvpn" #define PACKAGE_VERSION "2.1.1" 注释掉以下这行,否则和vc的定义冲突,会出很多error #define vsnprintf _vsnprintf * 打开 misc.c 1200行附近 把const int n_rnd_bytes = 6; 替换成#define n_rnd_bytes 6 vc还不支持变量作为栈变量数组的size     j. Build all,应该可以搞定。
顶一下
(0)
踩一下
(0)