libevent(1)windows下安装libevent

Socket通信库libevent成熟、稳定、性能高,在unix和windows下都能使用,在证券交易领域也有不少成功的应用,已经用事实证明是非常棒的socket通信库。对我们目前交易系统的unix重构来说,是比较合适的选择 –– 坑少、在证券交易项目中有成功案例、unix和windows下都能用、性能高等。

在具体开发过程中,我采用在windows上开发测试,再在unix上运行测试的原则。

Windows开发环境:win7、win10。

Unix开发环境:centos7。

软件版本:

Windows:windows7

VS:vs2019 community

libevent :2.1.12              libevent

zlib:1.2.11         zlib Home Site

openssl:1.1.1l          /source/index.html

1、openssl安装

⑴ 安装perl

版本:5.26         Perl Download - www.perl.org

安装过程略。

安装好后,设置perl的环境变量,比如:D:\Perl64\bin

把VS的nmake环境变量也配置下,比如:

D:\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\bin\Hostx64\x64

⑵ 安装NASM汇编器

版本:2.13.03

我这里是直接解压缩一个zip 包:nasm-2.13.03-win64.zip

然后把环境变量设置一下(能找到nasm.exe文件),比如:

D:\Program Files\nasm-2.13.03-win64\nasm-2.13.03

⑶ 开始编译

libevent(1)windows下安装libevent_第1张图片

选择vs的x64 Native tools,进入openssl目录:

libevent(1)windows下安装libevent_第2张图片

 编译64位(32位的话用VC-WIN32):

perl configure VC-WIN64A no-shared \

--prefix= D:\libevent\openssl-1.1.1\build32 \

--openssldir= D:\libevent\openssl-1.1.1\build\SSL

说明:

如果报错:you may need to install the Win32::Console module

则修改 D:\Perl64\site\lib\ActivePerl目录下的Config.pm文件,在400行左右,注释掉一些代码,如下“红色代码”所示:

# Prevent calling Win32::Console::DESTROY on a STDOUT handle

#my $console;

sub _warn {

#    my($msg) = @_;

#    unless (-t STDOUT) {

#     print "\n$msg\n";

#     return;

#    }

#    require Win32::Console;

#    unless ($console) {

#     $console = Win32::Console->new(Win32::Console::STD_OUTPUT_HANDLE());

#    }

#    my($col,undef) = $console->Size;

#    print "\n";

#    my $attr = $console->Attr;

#    $console->Attr($Win32::Console::FG_RED | $Win32::Console::BG_WHITE);

#    for (split(/\n/, "$msg")) {

#     $_ .= " " while length() < $col-1;

#     print "$_\n";

#    }

#    $console->Attr($attr);

#    print "\n";

}

生成makefile文件后,下面执行命令:

nmake (可能耗费时间较长,请耐心等待10分钟)

nmake install

2、zlib安装

⑴ 把zlib源代码解压缩到目录:

D:\libevent\zlib-1.2.11

⑵ 打开x64 Native tools command prompt后,进入zlib里的子目录masmx64。

libevent(1)windows下安装libevent_第3张图片

⑶ 运行bld_ml32.bat。

运行完毕后会生成2个obj文件。

⑷ 打开VS,选择“打开项目或解决方案(P)”,打开:

D:\libevent\zlib-1.2.11\contrib\vstudio\vc14\ zlibvc.sln

编译项目。

如果报错,一般这么做就能解决:

libevent(1)windows下安装libevent_第4张图片

3、libevent安装

⑴ 把libevent-2.1.12-stable.tar.gz文件解压缩到目录:D:\libevent

⑵ 打开x64 Native tools command prompt后,进入libevent目录。

 libevent(1)windows下安装libevent_第5张图片

 修改以下5个文件:

①在 event_iocp.c evthread_win32.c listener.c 中加入一个宏定义 #define _WIN32_WINNT 0x0500

②修改 minheap-internal.h 其中有一个UINT32_MAX的宏定义不受支持 改成UINT_MAX

③修改 Makefile.nmake 找到 CFLAGS=$(CFLAGS) /Ox /W3 /wd4996 /nologo /Zi 务必加上最后一个选项方便调试。

⑶ 开始编译

nmake /f Makefile.nmake OPENSSL_DIR=D:\libevent\openssl-1.1.1\build32

注意,这里openssl的目录。里面有这几个文件夹。

libevent(1)windows下安装libevent_第6张图片

⑷ 编译后,我这里有报错:

找不到libeay32.lib。

libevent(1)windows下安装libevent_第7张图片

解决办法:

① 打开libevent的test目录里的Makefile.nmake文件。

libevent(1)windows下安装libevent_第8张图片

找到这行:

libevent(1)windows下安装libevent_第9张图片

② 分别把ssleay32.lib、libeay32.lib文件替换成openssl里lib目录下的:libcrypto.lib、libssl.lib文件。

libevent(1)windows下安装libevent_第10张图片

③ 先nmake /f Makefile.nmake clean,然后再运行:

nmake /f Makefile.nmake OPENSSL_DIR=D:\libevent\openssl-1.1.1\build32

发现会报这样的错误:

libcrypto.lib(e_capi.obj) : error LNK2001: 无法解析的外部符号 __imp__CertFreeCertificateContext@4

继续修改libevent-2.1.12\test目录下的Makefile.nmake文件,加上Crypt32.lib库。

libevent(1)windows下安装libevent_第11张图片

④ 运行后又发现下面的错误:

libevent(1)windows下安装libevent_第12张图片

修改minheap-internal.h文件,加上:#pragma comment(lib, "Iphlpapi.lib")

然后:

nmake /f Makefile.nmake clean

nmake /f Makefile.nmake OPENSSL_DIR=D:\libevent\openssl-1.1.1\build32

⑸ 编译成功后,可执行test\ regress.exe检测下。

(6) 测试libevent

libevent(1)windows下安装libevent_第13张图片

libevent(1)windows下安装libevent_第14张图片

 测试成功!

参考:

(1) WINDOWS下安装使用libevent
https://blog.csdn.net/luoxin97/article/details/106716980
(2)nmake fatal error u1077:path/c1.exe 返回代码0x2解决思路
https://blog.csdn.net/sean4m/article/details/60143222
(3)windows编译libevent报错
https://blog.csdn.net/weixin_41560737/article/details/126787906
https://blog.csdn.net/yuanshenqiang/article/details/121018148
https://blog.csdn.net/qq_33194301/article/details/104879626
http://t.zoukankan.com/zkhm123-p-5976061.html
(4)多线程环境中使用Libevent
https://blog.csdn.net/whf_139/article/details/126578936
 

你可能感兴趣的:(网络编程,linux,服务器,libevent)