windows上先简单使用libevent,运行demo

news2024/9/29 7:22:41

使用libevent

1:获取libevent库。

从libevent 官网中获取,这里获取到的版本是libevent-2.1.12-stable.tar

2:windows上编译libevent库(VS2019上使用)

2.1:cmake准备

注:这里要用cmake进行编译,除此之外还需要用到cl连接器。

我在自己安装cmake后用安装后的cmake进行编译时发现有找不到cl指令的问题,

这里直接用vs2019ide下的cmake直接进行编译没有出现问题。

在这里插入图片描述

2.2:进行编译

解压压缩包后,在libevent-2.1.12-stable目录下新建build目录

如果直接在build目录下用cmake … 进行编译,会发现有openssl模块的报错
在这里插入图片描述

关闭依赖openssl模块,用如下指令进行编译。

D:\software\VS_2019\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake .. -DEVENT__DISABLE_OPENSSL=ON -DEVENT__LIBRARY_TYPE=STATIC -DEVENT__DISABLE_DEBUG_MODE=ON

2.3:build目录下生成了libevent.sln文件

用vs2019打开该项目文件,可以看到,已经正常加载项目,以及有多个模块的测试demo

选择其中一个,这里用time-test作为启动项,进行运行测试,测试成功。

在这里插入图片描述

2.4:生成lib库并被其他项目调用

生成对应的debug和release相关库。

指令如下,还是在当前build目录下

D:\software\VS_2019\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake ..  --build . --config Debug

D:\software\VS_2019\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake ..  --build . --config Release

执行后,分别生成对用的debug和Release模块对应的相关lib库和一些测试demo的可执行文件。

对应的lib库参考 build目录下的lib目录,其他项目依赖需要连接该lib目录下的相关库。

对应的一些demo的可执行文件参考build目录下的bin目录,bin目录下可执行文件可执行。

3:供其他项目调用

3.1 准备需要的头文件和链接库

这里主要准备对应的头文件,和需要的链接库。

1:动态连接库可取 libevent-2.1.12-stable\build\lib目录下

2:头文件需要取 libevent-2.1.12-stable\include ,libevent-2.1.12-stable\compat, libevent-2.1.12-stable\WIN32-Code\nmake目录下的头文件,进行合并

3.2 创建项目进行测试

1:vs2019下新建一个项目,点击项目属性,配置头文件 (注意这里配置的debug,如果要测试Release类似)

在这里插入图片描述

2:配置lib

Release版本类似,同样需要配置
在这里插入图片描述

C:\Users\yun68\Desktop\libevent\lib\Debug\event.lib
C:\Users\yun68\Desktop\libevent\lib\Debug\event_extra.lib
C:\Users\yun68\Desktop\libevent\lib\Debug\event_core.lib
ws2_32.lib
iphlpapi.lib
Advapi32.lib

注: Advapi32.lib这个lib库是在调试中发现有报错,解决问题新增的。

3:拷贝libevent库目录下的sample下的demo进行测试。

3.1 这里拷贝的是 time-test.c 文件内容,直接替换。

最终测试成功,但是遇到过两个问题:

1:需要增加宏 #define _CRT_SECURE_NO_WARNINGS (也可以参考在预编译头中增加对应宏解决)

2:编译的时候注意选择编译的版本相关。 如这种报错,这里应该选择x64

在这里插入图片描述

3.2 拷贝hello-world.c下的内容进行测试

用 telnet 127.0.0.1 9995指令进行测试,现象如下。
在这里插入图片描述

打算研究一些win上网络库的使用,简单先运行libevent的demo,然后研究看看源码,下一步。

参考:安装和使用libevent - 知乎 (zhihu.com)

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

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

相关文章

变动的Python爬虫实现

在电商时代,了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例,您将能够轻松监控商品价格,并及时做出决策。 一、了解需求和目标 在…

HyperMotion高度自动化云迁移至华为HCS8.1解决方案

项目背景 2020 年以来,金融证券已经成为信创落地最快的领域。2021 年证监会发布的《证券期货业科技发展十四五规划》中,将“加强信创规划与实施”作为证券行业重点建设任务之一。为了符合国家信创标准,某证券企业计划将网管系统、呼叫中心管…

操作系统——Linux基本命令

文章目录 1.目录切换命令2. 目录的操作命令(增删改查)3. 文件的操作命令(增删改查)4. 压缩文件的操作命令5. Linux 的权限命令6. Linux 用户管理7. Linux 系统用户组的管理8. 其他常用命令 Linux 命令大全:http://man.linuxde.net/ 1.目录切换命令 cd usr&#xf…

《TCP IP网络编程》第十七章

第 17 章 优于 select 的 epoll 17.1 epoll 理解及应用 select 复用方法由来已久,因此,利用该技术后,无论如何优化程序性能也无法同时介入上百个客户端。这种 select 方式并不适合以 web 服务器端开发为主流的现代开发环境,所以需…

RCNA——静态路由配置

静态路由的一堆特点就不多说了,之前文章有提到过。 一,实验背景 公司扔给你几台路由器,并和你说,我们公司需要一条通往公司外的网络,你帮忙配置一下。这类网络很显然要利用VPN等技术,奈何公司穷的一批&…

[语音识别] 基于Python构建简易的音频录制与语音识别应用

语音识别技术的快速发展为实现更多智能化应用提供了无限可能。本文旨在介绍一个基于Python实现的简易音频录制与语音识别应用。文章简要介绍相关技术的应用,重点放在音频录制方面,而语音识别则关注于调用相关的语音识别库。本文将首先概述一些音频基础概…

【Rust】Rust学习 第十六章Rust 的面向对象特性

面向对象编程(Object-Oriented Programming,OOP)是一种模式化编程方式。对象(Object)来源于 20 世纪 60 年代的 Simula 编程语言。这些对象影响了 Alan Kay 的编程架构中对象之间的消息传递。他在 1967 年创造了 面向对…

【Unity3D】程序纹理简单应用

1 几何纹理应用 1.1 边框 1)边框子图 Border.shadersubgraph 说明:Any 节点用于判断输入向量中是否存在一个分量非零,Branch 节点根据输入的真假走不同的分支,详见→Shader Graph节点。 2)圆环 Ring.shadergraph 说明…

Web 拦截器-interceptor

拦截器是一种动态拦截方法调用的机制,类似于过滤器,是Spring框架提出的,用来动态拦截控制器方法的执行。 其作用是拦截请求,在指定方法调用前后,根据业务执行预设代码。 实现步骤 1.定义拦截器,实现Handl…

欧拉计划44题

Pentagon numbers Pentagonal numbers are generated by the formula, . The first ten pentagonal numbers are: 1,5,12,22,35,51,70,92,117,145,… It can be seen that . However, their difference, 70−2248, is not pentagonal. Find the pair of pentagonal numbers, a…

室颤(VF)检测的算法 TCSC

室颤检测检测算法很多,最早关注的是TCI 算法。看看原始论文的 TCI 参数分布图: 分布图上显示,VFVT 和 NSR 分离特性很好。但是这有一个前提,和选择的数据集有很大关系。 在看看下面一篇论文: A simple time domain al…

Java-图书登录系统的实现

实现效果 它将面对 管理员 和 普通用户 两种用户来提供服务,并且各自的服务并不相同。 实现思路 一般写项目,每个独立的功能都会写成一个类,而有关联的功能,都会将多个类存放在一个包中,此项目我们将用 3 个包来体现我…

023:vue中解决el-date-picker更改样式不生效问题

第023个 查看专栏目录: VUE ------ element UI 本文章目录 修改后的效果示例源代码(共52行)核心内容步骤:(1)更改样式(2)添加参数 专栏目标 在vue项目开发中,我们打算保持颜色的一致…

辅助笔记-安装CentOS8.1虚拟机

安装CentOS8.1虚拟机 文章目录 安装CentOS8.1虚拟机1. CentOS8.1的安装1.1 下载CentOS8.1镜像1.2 检查BIOS虚拟化支持1.3 新建虚拟机1.4 安装系统1.5 测试上网和终端 2. CentOS8.0和CentOS7.0的区别(了解) 本文主要参考B站视频“P116_ 韩顺平Linux_cntos8安装和介绍”。 本文目…

小红书kol投放怎么做,kol投放工作规划!

作为分享类平台,小红书有着众多的kol类型。但是该如何合理的使用这些达人,达到品牌传播的目的,就需要一份详尽的计划。今天就跟大家分享一下,小红书kol投放怎么做,kol投放工作规划! 什么是kol投放 kol投放即…

迈向未来的大门:人脸识别技术的突破与应用

迈向未来的大门:人脸识别技术的突破与应用 人脸识别:人脸识别的工作流程人脸识别的作用人脸识别技术的突破与应用 在深度学习人脸识别之前我们要先知道人脸识别是什么。 人脸识别: 人脸识别是一种基于人脸图像或视频进行身份验证或识别的技术…

近实时智能应答 2D 数字人搭建

背景 早在大语言模型如 GPT-3.5 等的兴起和被日渐广泛地采用之前,教育行业已经在 AI 辅助教学领域有过各种各样的尝试。在教育行业,人工智能技术的采用帮助教育行业更好地实现教学目标、提高教学质量、提高学习效率、提高学习体验、提高学习成果。例如&a…

动态内存开辟

动态内存开辟 1.动态内存开辟相关试题 题目1: void GetMemory(char *p) {p (char *)malloc(100); } void Test(void) {char *str NULL;GetMemory(str);strcpy(str, "hello world");printf(str); }解释:这里在Test函数中,只是将…

FTP“方便”又“便宜”,为什么有必要替代?

FTP作为全世界第一款文件传输协议,在全球范围内得到大量应用,它为特定场景下的专业传输需求提供了解决方案,被各个行业和领域采用。 FTP使用普遍,主要得益于FTP的经济成本低,且使用方便。目前,开源FTP软件有…

sh脚本函数 数组 expect免交互

1、函数 在编写脚本时,有些脚本可以反复使用,可以调用函数来解决 语句块定义成函数约等于别名 1.1、设置函数 1.2、删除函数 unset 函数名 1.3、函数的传参数 函数变量的作用范围: 函数在shell脚本中仅在当前的shell环境中有效 shell脚…