libevent(1)windows下安装libevent

news2024/9/22 4:12:18

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

⑶ 开始编译

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

 编译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。

⑶ 运行bld_ml32.bat。

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

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

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

编译项目。

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

3、libevent安装

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

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

 

 修改以下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的目录。里面有这几个文件夹。

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

找不到libeay32.lib。

解决办法:

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

找到这行:

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

③ 先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库。

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

修改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

 测试成功!

参考:

(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
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/675221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Colors颜色代码对应表 | 常见颜色值的中英文对照及颜色值代码表Hex代码RGB代码

颜色代码对应表_颜色代码表大全——最全的颜色代码以及对应图片 Hex代码 RGB代码 关于颜色的英文&#xff0c;不仅仅有七个...... 一、常用颜色的英文名称&#xff1a; redcrimsonfirebrickdarkredbrownmaroonsiennasaddlebrownindianredrosybrownlightcoralsalmondarksalm…

壳牌小程序笔记

壳牌加油站 uni-app-基础-day01 概览 为什么要学uni-app&#xff1f; 现在很多中小型公司&#xff0c;都有自己的小程序项目&#xff0c;然后开发小程序就会用到uni-app。 uni-app没有诞生之前&#xff0c;怎么写小程序 使用原生微信小程序这个框架去开发&#xff1f; 只…

matplotlib---绘制折线图

1. 折线图 绘制一条线&#xff1a; plot函数来绘制折线图。下面是对各个参数的解释&#xff1a; x&#xff1a;要绘制折线图的x轴数据。y&#xff1a;要绘制折线图的y轴数据。c&#xff08;可选&#xff09;&#xff1a;指定折线的颜色。默认为蓝色&#xff08;"b"…

三模块七电平级联H桥整流器电压平衡控制策略仿真

三模块七电平级联H桥整流器电压平衡控制策略MATLAB仿真资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87934753模型简介&#xff1a; MATLAB2021b 采用三模块七电平级联H桥整流器仿真&#xff0c;采用电压电流双闭环控制&#xff0c;电流环采用PR控制&am…

「团建活动」无锡某企业2023拓展培训

如何让新员工快速融入集体&#xff0c;自发成长&#xff0c;一次次有效团建。 ➡️明确团队目标&#xff0c;提高处理问题的效率和能力&#xff0c;互相配合&#xff0c;更好完成任务 &#xff1b; ➡️协调个人与团队的关系&#xff0c;增进情感&#xff1b; ➡️激励团队&…

深度学习时间序列预测项目案例数据集介绍

💥项目专栏:【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍) 一、数据集介绍 🌈 本专栏使用的数据集为 风速预测的时间序列数据,该数据集包含一个气象站内嵌入的5个天气变量传感器阵列的 6574 个每日平均样本。该设备…

rabbitmq第一课-rabbitmq的快速安装以及核心概念

一、MQ介绍 1.什么是MQ&#xff1f;为什么要用MQ&#xff1f; 消息队列是一种在应用程序之间传递消息的技术。它提供了一种异步通信模式&#xff0c;允许应用程序在不同的时间处理消息。消息队列通常用于解耦应用程序&#xff0c;以便它们可以独立地扩展和修改。在消息队列中…

LNMP架构搭建实操

目录 一、安装Nginx服务 1.安装依赖包 2.创建Nginx运行用户 3.编译安装Nginx源码包 4.优化路径便于使用 5、添加 Nginx 系统服务 二、安装Mysql服务 1.安装Mysql环境依赖包 2.创建Mysql运行用户 3.编译安装 4.修改mysql配置文件 5.更改mysql安装目录和配置文件的属…

ArduPilot开源代码之AP_Logger

ArduPilot开源代码之AP_Logger 1. 源由2. Logger类2.1 Copter初始化2.2 Copter任务 3. 实例理解3.1 Copter设备应用任务3.1.1 Copter::ten_hz_logging_loop3.1.2 Copter::twentyfive_hz_logging 3.2 AP_Logger应用类任务3.2.1 AP_Logger::periodic_tasks3.2.2 AP_Logger::io_th…

ORB_SLAM3 IMU预积分PreintegrateIMU

这篇博文主要分享ORB_SLAM3中Tracking::PreintegrateIMU()&#xff0c;其主要包括几个部分&#xff1a; 获得两帧之间的IMU数据中值积分IMU状态更新 关于IMU的理论推导参考&#xff1a; ORB_SLAM3_IMU预积分理论推导(预积分项)ORB_SLAM3_IMU预积分理论推导(噪声分析)ORB_SLA…

第五章 Linux的文件权限与目录配置

Linux最好的地方之一就在于他的多用户多任务环境。为了让各个使用者具有较保密的文件数据&#xff0c;因此文件的权限管理就变得很重要了。Linux一般将文件可存取的身份分为三个类别&#xff0c;分别是owner/group/others,且三种身份各有read/write/execute等权限。 5.1 使用者…

【Servlet学习一】认识Servlet 创建第一个Servlet项目

目录 &#x1f31f;需要知道&#xff1a; &#x1f308;1、Tomcat是什么&#xff1f; &#x1f308; 2、Maven &#x1f31f;一、认识Servlet &#x1f308;1、Servlet是什么&#xff1f; &#x1f308;2、实现第一个Servlet项目。 &#x1f308;3、简单了解Postman工具…

Python3 模块与输入与输出 | 菜鸟教程(十二)

目录 一、Python3 模块 &#xff08;一&#xff09;import 语句 1、想使用 Python 源文件&#xff0c;只需在另一个源文件里执行 import 语句&#xff0c;语法如下&#xff1a; 2、当解释器遇到 import 语句&#xff0c;如果模块在当前的搜索路径就会被导入。 3、搜索路径是…

PID控制算法 – 1、Sample Time(采样时间)

前面介绍的PID代码虽然能跑起来&#xff0c;但是还存在一些问题。 PID控制算法 – 0、PID原理_资深流水灯工程师的博客-CSDN博客 对应的代码也重新贴一下&#xff0c;方便比较 /*工作变量*/ unsigned long lastTime; double Input, Output, Setpoint; double errSum, lastEr…

【初识C语言(2)】字符串+转义字符+注释

文章目录 1. 字符串2. 转义字符转义字符表常见转义字符 3. 注释 1. 字符串 “hello world.\n” 上面这种由双引号引起的一串字符就被称为字符串&#xff1b; 字符串的存储 C 语言当中没有字符串类型&#xff0c;如果想要将字符串存储起来的话就需要用到字符串数组。 #include…

LLaMA及其子孙模型概述

文章目录 LLaMAAlpacaVicunaKoalaBaize (白泽)骆驼(Luotuo)BELLEGuanaco LLaMA 与原始transformer的区别: 预归一化[GPT3]。为了提高训练稳定性&#xff0c;对每个Transformer子层的输入进行归一化&#xff0c;而不是对输出进行归一化。使用了Zhang和Sennrich&#xff08;201…

Redis进阶篇(附面试快速答法)

文章目录 Redis使用场景1、缓存穿透布隆过滤器小总结面试快速答法 2、缓存击穿小总结面试快速答法 3、缓存雪崩面试快速答法 4、双写一致性小总结面试快速答法 5、持久化机制面试快速答法 6、数据过期策略小总结面试快速答法 7、数据淘汰策略小总结面试快速答法 8、分布式锁小总…

Pytest集成Allure Report

目录 安装 用法 基本报告 支持 Pytest features Xfail 条件标记 Fixtures and Finalizers 参数化 Allure Features Steps 附件 描述 标题 链接 重试 Tags BDD 标签 严重性标记 Behave 安装 使用 Features 严重性 步骤和场景状态 步骤数据 安装 Pytest可从…

SpringBoot 如何使用 @RequestBody 进行数据校验

SpringBoot 如何使用 RequestBody 进行数据校验 在 Web 开发中&#xff0c;前台向后台发送数据是非常常见的场景。而在 SpringBoot 框架中&#xff0c;我们通常使用 RequestBody 注解来接收前台发送的 JSON 数据&#xff0c;并将其转化为 Java 对象。但是&#xff0c;接收到的…

你一定想知道的 如何进行动态内存管理?

文章目录 引言malloc函数calloc函数realloc函数free函数-避免内存泄漏常见的动态内存错误 引言 如果我们被问道&#xff1a;如何创建一个可以根据用户需求来开辟大小的数组&#xff1f; 可能有些博友会写出如下代码&#xff1a; #include <stdio.h> int main() {int n…