libevent 环境搭建
windows
环境准备: openssl-1.1.1 、 zlib-1.2.11 、libevent 2.1.8 、perl-5.24(编译openssl要用)、nasm-2.13.03(编译openssl要用) 、VS2017 我的是以上版本,都在官方能找得到,我编译的都是64位。
- 编译zlib , 我自己写的批处理来编译的,很简单,把路径改成自己的就可以了。。都以管理员权限运行!
set VS="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
set OUT="D:\c++\lib\out\vs2017_64\zlib"
call %VS%
cd zlib-1.2.11
nmake /f win32\Makefile.msc clean
nmake /f win32\Makefile.msc
md %OUT%\lib
md %OUT%\bin
md %OUT%\include
copy /Y *.lib %OUT%\lib
copy /Y *.h %OUT%\include
copy /Y *.dll %OUT%\bin
copy /Y *.exe %OUT%\bin
pause
- 编译openssl
@echo "开始编译openssl"
set VS="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
set OUT="D:\c++\lib\out\vs2017_64\openssl"
call %VS%
D:
cd D:\c++\lib\openssl-1.1.1
perl Configure VC-WIN64A --prefix=%OUT%
nmake clean
nmake
nmake install
@echo "编译openssl结束"
pause
- 编译libevent ,这里要指定openssl目录,不然该模块不会编译!
@echo "开始编译libevnet"
set VS="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
set OUT="D:\c++\lib\out\vs2017_64\libevent"
call %VS%
d:
cd D:\c++\lib\libevent-master
nmake /f Makefile.nmake clean
nmake /f Makefile.nmake OPENSSL_DIR=D:\c++\lib\out\openssl
md %OUT%\lib
md %OUT%\bin
md %OUT%\include
copy /Y *.lib %OUT%\lib
xcopy /S/Y include %OUT%\include
xcopy /S/Y WIN32-Code\nmake %OUT%\include
copy /Y *.dll %OUT%\bin
copy /Y *.exe %OUT%\bin
@echo "编译libevnet结束"
pause
编译的时候应该会出错,那是因为提示找不到 openssl的库名。 这时要打开 test/Makefile.nmake 这个文件 找到 SSL_LIBS= … 这一行,将这提示出错两个文件名,改为编译openssl时生成目录(我的D:\c++\lib\out\openssl)的两个lib文件
SSL_LIBS=..\libevent_openssl.lib (OPENSSL_DIR)\lib\libssl.lib(OPENSSL_DIR)\lib\libcrypto.lib gdi32.lib User32.lib
运行test目录下的 regress.exe 可以查看哪些模块编译成功
regress.exe > out.txt
打开 out.txt 可以看到 bufferevent_zlib: SKIPPED zlib模块没有编译!
打开test/Makefile.nmake文件 ,
在 REGRESS_OBJS=。。 的最后加上 regress_zlib.obj
在CFLAGS=。。 加上zlib的头文件 /I../zlib/include
在LIBS=。。 加上zlib的库文件 ..\zlib\lib\zdll.lib
将zlib1.dll 复制到 test目录下。
在WIN32-Code\nmake\event2\event-config.h文件中 定义 #define EVENT__HAVE_LIBZ
在次运行regress.exe > out.txt ,看哪些模块编译成功,这次应该都可以了。
Linux编译
环境准备:(我的是centos7)
yum install perl g++ make automake libtool unzip
- 编译zlib
./configure ;生成makefile
make
make install -
编译openssl
./config
make
make install -
编译libevent
./autogen.sh
./configure
make
make install
执行 test/regress > log.txt 查看哪些模块生成 应该都没啥问题,如果有问题,可能是openssl的版本不对,可以换成 openssl-1.0.2q 版本 重新编译试一下。。
测试程序
git地址: http://121.4.70.4:3000/adminPyf/libevent_study.git
libevent_study/first_libevent
同时兼容windows、linux。
#include <iostream>
#include<event2/event.h>
int main()
{
#ifdef _WIN32
//初始化socket库
WSADATA wsa;
WSAStartup(MAKEWORD(2, 2), &wsa);
#endif
//创建libevent上下文
event_base* base = event_base_new();
if (base) {
std::cout << "hello libevent! -- ";
}
return 0;
}