windows 平台使用 VS2017 编译 libevent 源码

一 依赖库编译
先要将其依赖的库编译好,其中openssl需要编译到libevent中,编译成libevent_openssl.lib库,zlib在新版本中只有示例用到。

1)windows 平台使用 VS2017 编译 openssl 源码
参考前面的文章
openssl 默认编译到 C:\Program Files (x86)\OpenSSL 目录,包含收文件,lib文件和dll文件,待会需要配置此路径,或者直接把编译好的openssl库复制到指定路径中。
2)使用 VS2017 编译 zlib 源码
1) 官方网站
http://www.zlib.net/
2)编译工具:VS2017社区版本
下载地址
http://ffmpeg.club/tools_download.html
3)下载zlib1.2.11源码
下载地址
http://ffmpeg.club/libevent.html
4) 编译步骤
(1)进入控制台(运行 CMD),或者编写批处理bat文件

(2)运行vs编译环境

打开菜单中VS2017中有对应的命令行工具,把地址复制过来
编译32位库版本
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsamd64_x86.bat
编译64位库版本
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
运行后出现如下内容

(3)进入zlib源码吗目录

cd zlib-1.2.11
(4)用nmake编译

nmake -f win32/Makefile.msc -

编译好后生成的动态库 zdll.dll zdll.lib 和静态库zlib.lib都在zlib-1.2.11根目录下。
二 libevent编译环境准备
操作系统:windows 10 64位
编译工具:VS2017社区版本
下载地址
http://ffmpeg.club/tools_download.html
libevent 2.1.8 源码
下载地址
http://www.libevent.net/download
三 编译libevent源码
1)依赖安装编译
编译工具:VS2017社区版本
下载地址
http://ffmpeg.club/tools_download.html
编译好openssl安装后复制到 D:\lib\openssl 路径
libevent_openssl.lib 库需要,如果不用此库可以不编译openssl
编译好zlib 安装在D:\libevent\zlib-1.2.11\
新版本libevent已经和zlib分离,但是示例有用zlib,如果不需要此示例可以不编译zlib
2) 编译步骤
(1)进入控制台(运行 CMD),或者编写批处理bat文件
(2)运行vs编译环境
打开菜单中VS2017中有对应的命令行工具,把地址复制过来
编译32位库版本
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsamd64_x86.bat
编译64位库版本
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
(3)进入libevent源码吗目录
cd libevent-master
(4)清理之前的编译
nmake /f Makefile.nmake clean
(5)编译libevent
nmake /f Makefile.nmake OPENSSL_DIR=D:\lib\openssl
OPENSSL_DIR 是openssl库的路径,之前版本需要制定zlib库路径,新版本不需要
(6)编译包含了libevent的库项目和示例项目,编译的示例项目由于用了zlib并且openssl版本比较旧,所以会产生问题
3)编译中出现的问题
(1)示例中的openssl问题
出现的问题
编译错误、会显示找不到openssl的ssleay32.lib和libeay32.lib库
原因
旧版本的openssl和新版本采用不同库名
解决方案
打开test目录下的Makefile.nmake
找到 SSL_LIBS=..\libevent_openssl.lib $(OPENSSL_DIR)\lib\libeay32.lib $(OPENSSL_DIR)\lib\ssleay32.lib gdi32.lib User32.lib
修改为 SSL_LIBS=..\libevent_openssl.lib $(OPENSSL_DIR)\lib\libssl.lib $(OPENSSL_DIR)\lib\libcrypto.lib gdi32.lib User32.lib
(2)示例中的zlib问题
出现的问题
默认不编译zlib示例,设置编译后找不到zlib库和头文件
解决方案
在编译libevent之前设置编译zlib示例
修改WIN32-Code\nmake\event2\event-config.h
添加#define EVENTHAVE_LIBZ
修改原因在示例代码test\regress_bufferevent.c 1382行中做了如下判断
#ifdef EVENT
HAVE_LIBZ
LEGACY(bufferevent_zlib, TT_ISOLATED),
#else
{ "bufferevent_zlib", NULL, TT_SKIP, NULL, NULL },
#endif
修改zlib示例的编译项目
打开test目录下的Makefile.nmake
修改LIBS,设置zlib库文件路径
LIBS=..\libevent.lib ws2_32.lib shell32.lib advapi32.lib D:\libevent\zlib-1.2.11\zdll.lib
修改CFLAGS添加zlib头文件路径
CFLAGS=/I.. /I../WIN32-Code /I../WIN32-Code/nmake /I../include /I../compat /DHAVE_CONFIG_H /DTINYTEST_LOCAL $(SSL_CFLAGS) -ID:\libevent\zlib-1.2.11
相关视频如下

https://edu.51cto.com/course/17731.html

原文地址:https://blog.51cto.com/xiacaojun/2387657

时间: 2024-11-05 20:48:11

windows 平台使用 VS2017 编译 libevent 源码的相关文章

windows 平台使用 VS2017 编译openssl源码

1)依赖安装安装 perl 脚本解释器下载 http://libevent.net/download安装 nasm 汇编器C:\Users\xiaca\AppData\Local\bin\NASM下载 http://libevent.net/download默认会安装用户目录C:\Users\用户名\AppData\Local\bin\NASM配置windows的环境变量,将此路径加入到环境变量path中安装好后,重新打开控制台能够运行nasm 和perl命令2)编译工具:VS2017社区版本下

Windows,linux下编译qt源码(比较简单)

一.linux下静态编译qt源码 1.取到qt源码并解压到文件夹 2.cd到qt目录下 3.使用configure生成makefile ./configure–prefix /opt/qtstatic –static –release -nomake examples  --nomake demos-nomake docs -continue 4.待执行完之后执行make 5.makeinstall 参考:http://www.cnblogs.com/qianyuming/archive/201

如何在Windows上编译wireshark源码

在深受了几天编译wireshark源码的痛苦后,记录下自己编译wireshark的经验,希望能给今后需要编译wireshark的人一些帮助.这个方法是能编译最新的wireshark源码,现在网上找的一些方法都是旧的一些方法,编译最新的wireshark是行不通的.我参考的是一个英文的说明文档,如果阅读此文档的人没有困难的话,可以就此英文文档说明进行编译.附上地址:https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html

libevent源码安装及Linux自动编译功能总结

这几天在阅读libevent源码,发现参考资料是基于libevent-2.1的版本,所以就去官网下载了2.1的版本: http://libevent.org/ (其实是在git下载的:https://github.com/libevent/libevent),版本应该是libevent-2.1.so.5.0.0 下载下来,发现目录里面没有常见的configure, Makefile等文件,搜索之后,了解到需要使用autoconf, automake等工具进行处理. 首先针对automake等工具

libevent源码深度剖析十

libevent源码深度剖析十 --支持I/O多路复用技术张亮 Libevent的核心是事件驱动.同步非阻塞,为了达到这一目标,必须采用系统提供的I/O多路复用技术,而这些在Windows.Linux. Unix等不同平台上却各有不同,如何能提供优雅而统一的支持方式,是首要关键的问题,这其实不难,本节就来分析一下. 1 统一的关键 Libevent支持多种I/O多路复用技术的关键就在于结构体eventop,这个结构体前面也曾提到过,它的成员是一系列的函数指针, 定义在event-internal

【转】libevent源码分析

libevent源码分析 转自:http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html 这两天没事,看了一下Memcached和libevent的源码,做个小总结. 1.入门 1.1.概述Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库.Libevent有几个显著的亮点: (1)事件驱动(event-driven),高性能:(2)轻量级,专注于网络,不如 ACE 那么臃肿庞

重新编译jdk源码,启用debug信息

我有一个不知道是好还是不好的习惯,搞不懂的一些玩意儿,喜欢调试然后单步执行看这玩意儿到底是怎么运行的. 今天看到正则表达式的时候,appendReplacement()这个方法怎么也看不明白它是怎么工作的,于是想调试源码单步执行,然后watch几个关键的变量看看. 刚开始的时候,eclipse里调试模,单步,发现没有办法进入方法内. 用google百度了一下,发现是JRE配置的问题. 使用jre是不可以的,需要使用jdk的环境.(之前真的没有注意到这一点) 于是window->Preferenc

libevent源码深度剖析二

libevent源码深度剖析二 --Reactor模式 张亮 前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件和Reactor的对应关系,在后面的章节中可能还会提到本节介绍的基本概念. 1 Reactor的事件处理机制 首先来回想一下普通函数调用的机制:程序调用某函数?函数执行,程序等待?函数将结果和控制权返回给程序?程序继续处理. Reactor释义"反应堆",是一种事件驱动机制.和普通

libevent源码深度剖析十一

libevent源码深度剖析十一 --时间管理张亮 为了支持定时器,Libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数.时间缓存.时间校正和定时器堆的时间值调整等.下面就结合源代码来分析一下. 1 初始化检测 Libevent在初始化时会检测系统时间的类型,通过调用函数detect_monotonic()完成,它通过调用clock_gettime()来检测系统是否支持monotonic时钟类型: [cpp] view plaincopy static v