« | September 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | |
| 公告 |
戒除浮躁,读好书,交益友 |
Blog信息 |
blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9702999 建立时间:2004年12月20日 |

| |
[c++]VC++6.0 和vs 2005编译OpenVPN 原创空间, 文章收藏, 软件技术, 电脑与网络
邢红瑞 发表于 2009/4/3 11:17:51 |
在Windows下编译OpenVPN,推荐用MinGW工具,readme有,感觉MinGW编译出的openvpn运行速度快些,不过我不熟悉MinGW。不建议编译OPENSSL,需要安装perl,环境问题很多。1.编译lzo ,因为openvpn默认配置用到了lzo压缩库,所以下载lzo压缩包:lzo-2.03,并且将lzo-2.03包中的include文件加入到工程中,将头文件全部加入进去的,必须加上编译选项:LZO_HEADER_DIR 将lzo解压至C盘根目录,在命令行中运行vcvars32.bat,进入lzo目录,不是 win32目录,运行b\win32\vc.bat,编译成功后生成lzo2.lib。
2.在VC中编译OpenVPN a. 在VC中新建一个名字为OpenVPN的win32 application工程,类型为an empty project。将OpenVPN解压到该工程目录下,将\OpenVPN目录下的.c文件添加到source files中,将.h文件添加到header files中,包括tap-win32目录的东西。 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 <winsock2.h>windows.h中又包含了<winsock.h>导致和winsock2.h冲突,解决方法是在include<windows.h>之前添加宏: #define WIN32_LEAN_AND_MEAN#include <windows.h>#include <winsock2.h>在所有的#include <windows.h>前使用#define WIN32_LEAN_AND_MEAN,如:#define WIN32_LEAN_AND_MEAN#include <windows.h> h.VC中不识别unsigned long long int类型,需改为_int64,修改openvpn的common.h头文件,#ifdef USE_64_BIT_COUNTERS// typedef unsigned long long int counter_type; typedef _int64 counter_type; //修改后
# ifdef WIN32# define counter_format "%I64u"# else# define counter_format "%llu"# endif#else typedef unsigned int counter_type;# define counter_format "%u"#endif i. 添加类库 #pragma comment (lib, "iphlpapi.lib") //路由用到#pragma comment (lib, "crypt32.lib") //找到crytoapi.c文件中的CertFreeCertificateContext 函数#pragma comment (lib, "ws2_32.lib") //winsock#pragma comment (lib, "libeay32.lib") #pragma comment (lib, "ssleay32.lib")#pragma comment (lib, "lzo.lib"j.删除memcmp.c文件,否则realease有问题3.vc6 编译出现冲突时,link中input 禁用libcd.lib.出现__mb_cur_max;没有定义,建立一个a.cpp文件,extern "C" { int __mb_cur_max; unsigned short* _pctype; int errno;}vs 2005 出现File:gmtime64.cLine:63Expression:(caltim <= _MAX_TIME64_T)Project Properties里面C/C++下的Preprocessor Definitions加上 _USE_32BIT_TIME_T。 |
|
回复:VC++6.0 和vs 2005编译OpenVPN 原创空间, 文章收藏, 软件技术, 电脑与网络
小武(游客)发表评论于2010/12/14 9:47:38 |
以下引用小武(游客)在2010-12-14 9:46:08的评论:
以下引用小武(游客)在2010-12-8 22:18:07的评论:我用vs2005建了一个空的项目,把lzo-2.0.3的include的文件都加进了工程中,再把lzo-2.0.3放到C盘下,运行了vcvars32.bat,再运行时b\win32\vc.bat时,出了个错,说'cl'不是内部或外部的命令,也不是可运行的程序。求高人分析一下晕,解决了,是我进入了win32下运行vc.bat,要退到lzo-2.04运行b\win32\vc.bat |
|
回复:VC++6.0 和vs 2005编译OpenVPN 原创空间, 文章收藏, 软件技术, 电脑与网络
小武(游客)发表评论于2010/12/14 9:46:08 |
以下引用小武(游客)在2010-12-8 22:18:07的评论:我用vs2005建了一个空的项目,把lzo-2.0.3的include的文件都加进了工程中,再把lzo-2.0.3放到C盘下,运行了vcvars32.bat,再运行时b\win32\vc.bat时,出了个错,说'cl'不是内部或外部的命令,也不是可运行的程序。求高人分析一下 |
|
回复:VC++6.0 和vs 2005编译OpenVPN 原创空间, 文章收藏, 软件技术, 电脑与网络
小武(游客)发表评论于2010/12/8 22:18:07 |
我用vs2005建了一个空的项目,把lzo-2.0.3的include的文件都加进了工程中,再把lzo-2.0.3放到C盘下,运行了vcvars32.bat,再运行时b\win32\vc.bat时,出了个错,说'cl'不是内部或外部的命令,也不是可运行的程序。求高人分析一下 |
|
回复:VC++6.0 和vs 2005编译OpenVPN 原创空间, 文章收藏, 软件技术, 电脑与网络
风(游客)发表评论于2009/7/23 10:29:22 |
说了老半天,你把编译好的提供一个包下载不行?
每个人下载的原始包跟你的不一定一样,而且,还要不厌其烦的做相同的修改修改之类的事情。。。
请博主提供一个弄好的下载地址,谢谢 |
|
» 1 »
|