libevent实践01:准备源码、搭建项目、编译脚本和入门例子

article/2025/9/10 13:12:35

编译源码

libevent是一个Reactor事件库。

我的理解,就是封装了select、epoll、poll的函数库。有使用select,poll,epoll的需求就可以使用的。

官网地址:https://libevent.org/

下载源码:

https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz

下载后解压源码:

tar zxvf libevent-2.1.12-stable.tar.gz

 在源码目录下创建_install目录,然后执行 ./configure --prefix=/big/libevent/libevent-2.1.12-stable/_install。

/big/libevent/libevent-2.1.12-stable/_install这个就是编译后安装的目录。详细步骤如下所示:

lkmao@ubuntu:/big/libevent$ ls
libevent-2.1.12-stable  libevent-2.1.12-stable.tar.gz
lkmao@ubuntu:/big/libevent$ cd libevent-2.1.12-stable/
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ mkdir _install
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ cd _install/
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install$ pwd
/big/libevent/libevent-2.1.12-stable/_install
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install$ cd ..
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ ./configure --prefix=/big/libevent/libevent-2.1.12-stable/_install

        这一步是用来生成编译时用的makefile文件,其中,--prefix用来指定Libevent的安装目录。输入make进行编译,成功后再输入make install,然后就可以看到/big/libevent/libevent-2.1.12-stable/_install下面已经有文件生成了:

lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ make
/*略*/
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ make install
/*略*/
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable$ cd _install/
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install$ ls
bin  include  lib

        其中include是存放头文件的目录,lib是存放动态库和静态库的目录。接下来用一个小程序来测试是否工作正常。

二 创建项目并测试 

 创建一个目录,用于存放我们的工程文件和源码:

lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install$ mkdir learn
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install$ cd learn/

在目录下创建三个文件,

  1. 编译脚本build.sh
  2. cmake文件CMakeLists.txt
  3. 源码文件main_01.c 
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ ls
build.sh  CMakeLists.txt  main_01.c
lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$

 下面分别介绍三个文件内容

main_01.c

创建源文件:main_01.c,输入如下代码,如果写过select函数,很快就能了解,此代码的功能是设置一个定时器,然后每隔1秒就打印一次“timer wakeup!counter = %d”。

 printf("timer wakeup!counter = %d\n",counter++);

#include <sys/types.h>
#include <event2/event-config.h>
#include <stdio.h>
#include <event.h>
struct event ev;
struct timeval tv;void time_cb(int fd, short event, void *argc)
{
static int counter = 0;printf("timer wakeup!counter = %d\n",counter++);event_add(&ev, &tv);
}int main()
{struct event_base *base = event_init();tv.tv_sec = 1;tv.tv_usec = 0;evtimer_set(&ev, time_cb, NULL);event_base_set(base, &ev);event_add(&ev, &tv);event_base_dispatch(base);
}

build.sh

#!/bin/bash
set -e
rm -rf _build_
mkdir _build_ -p
cmake -S ./ -B _build_
make -C _build_
./_build_/main_01

要保证build.sh文件是可执行的

chmod 777 build.sh 

CMakeLists.txt

project(libevent_project)
cmake_minimum_required(VERSION 3.8)message(STATUS "lkmao:CMAKE_SOURCE_DIR -- ${CMAKE_SOURCE_DIR}")set(LIBEVET_INSTALL_PATH "/big/libevent/libevent-2.1.12-stable/_install/")
include_directories(${LIBEVET_INSTALL_PATH}/include 
)# set(CMAKE_C_COMPILER /arm-gcc/bin/arm-linux-gnueabihf-gcc)
# set(CMAKE_CXX_COMPILER /arm-gcc/bin/arm-linux-gnueabihf-g++)# SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -pthread")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -lstdc++")message(STATUS "lkmao:PROJECT_SOURCE_DIR -- ${PROJECT_SOURCE_DIR}")add_executable(main_01 main_01.c)
target_link_libraries(main_01 ${LIBEVET_INSTALL_PATH}/lib/libevent.so)

测试验证

文件都准备好,并输入内容后执行build.sh文件,执行结果如下所示:

lkmao@ubuntu:/big/libevent/libevent-2.1.12-stable/_install/learn$ ./build.sh 
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- lkmao:CMAKE_SOURCE_DIR -- /big/libevent/libevent-2.1.12-stable/_install/learn
-- lkmao:PROJECT_SOURCE_DIR -- /big/libevent/libevent-2.1.12-stable/_install/learn
-- Configuring done
-- Generating done
-- Build files have been written to: /big/libevent/libevent-2.1.12-stable/_install/learn/_build_
make: Entering directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
make[1]: Entering directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
make[2]: Entering directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
Scanning dependencies of target main_01
make[2]: Leaving directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
make[2]: Entering directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
[ 50%] Building C object CMakeFiles/main_01.dir/main_01.c.o
[100%] Linking C executable main_01
make[2]: Leaving directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
[100%] Built target main_01
make[1]: Leaving directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
make: Leaving directory '/big/libevent/libevent-2.1.12-stable/_install/learn/_build_'
timer wakeup!counter = 0
timer wakeup!counter = 1
timer wakeup!counter = 2
timer wakeup!counter = 3
timer wakeup!counter = 4
timer wakeup!counter = 5
timer wakeup!counter = 6

由下面的截图可知,我们的测试代码开始运行了。

四 命令行编译 

gcc main_01.c -o testEvent -I /big/libevent/libevent-2.1.12-stable/_install/include/ -L /big/libevent/libevent-2.1.12-stable/_install/lib/ -levent

使用命令行,需要设置环境变量,要不然,找不到库。 

 小结


http://chatgpt.dhexx.cn/article/AK5LWiLa.shtml

相关文章

libevent(1)windows下安装libevent

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

Libevent库的学习

目录 Libevent 概述 Libevent 使用模型 使用Libevent的基本流程&#xff1a; libevent 的核心&#xff0c;event 事件 1. 创建一个事件event 2. 释放event_free 3. 注册event 4. 信号事件 5. 销毁event_base Libevent 结构图 使用libevent库去实现tcp服务器 Libev…

编译libevent

本文记录在win10编译libevent的过程 1.编译前准备zlib,openssl zlib网址 http://www.zlib.net/ 下载源码解压缩 打开vs的dos窗口 32位选择32位窗口这里选择64位,cd 到解压后的文件夹 执行 nmake /f win32/Makefile.msc 执行后可以看到目录下有lib文件和dll文件和测试文件…

libevent简要介绍

libevent库 开源。精简。跨平台&#xff08;Windows、Linux、Maxos、unix&#xff09;。专注于网络通信。 源码包安装&#xff1a; ./configure 检查安装环境 生成makefile make 生成.o和可执行文件 sudo make install …

Libevent库的简介

一、libevent是什么 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&#xff1b…

libevent库学习(1)

一、初识 1、libevent介绍 Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库&#xff0c;主要有以下几个亮点&#xff1a;事件驱动&#xff08; event-driven&#xff09;&#xff0c;高性能;轻量级&#xff0c;专注于网络&#xff0c;不如 ACE 那么臃肿庞大&…

详解Libevent网络库

项目中要用到libevent&#xff0c;所以就自学了libevent&#xff0c;参考资料为张亮的《libevent源码深度剖析》和《linux高性能服务器编程》 Libevent简介 Libevent是开源社区一款高性能的I/O框架库&#xff0c;其具有如下特点&#xff1a; 1.跨平台支持。Libevent支持Linu…

Libevent库的介绍与应用

Libevent库 Libevent概述Libevent使用模型Libevent库使用示例Libevent事件类型和框架结构使用Libevent完成tcp服务端 Libevent概述 Libevent是开源社区的一款高性能的I/O框架库&#xff0c;使用Libevent的著名案例有&#xff1a;高性能的分布式内存对象缓存软件memcached,Goog…

Linux c 开发 - libevent

目录 一、event_base 1. 创建event_base 2. 查看IO模型 3. 销毁event_base 4. 事件循环 event loop 5. event_base的例子 二、event 事件 1. 创建一个事件event 2. 释放event_free 3. 注册event 4.event_assign 5. 信号事件 6. event细节 三、Socket实例 四、Bu…

安装svn客户端

下载地址 下载 TortoiseSVN 我的网盘地址&#xff1a; 百度网盘 请输入提取码 提取码&#xff1a; em9s 1、安装客户端 双击运行&#xff1a; 点击【next】 点击【next】 选择好路径后&#xff0c;点击【next】 点击【install】安装 点击【finish】完成安装。安装完成后重…

SVN客户端配置--客户端

一、使用客户端软件连接SVN服务器 在项目文件夹中单击右键–>TortoiseSVN–>Repo-browser,并在弹出框中贴入URL&#xff08;svn://服务器IP&#xff09; 在图中指定的位置单击右键选择checkput 点击OK点击OK SVN的三大指令 指令名称Checkout①连接到SVN服务器②更新服务…

SVN客户端(TortoiseSVN)安装及使用说明

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SVN客户端(TortoiseSVN)安装及使用说明 ⏱️ 创作时间&#xff1a; 20…

ubuntu搭建SVN客户端,右击提交或更新

有时候我们会在Linux系统上搞开发&#xff0c;项目在SVN上&#xff0c;不搭建SVN环境搞起来比较麻烦&#xff0c;不用其他软件为载体实现右击提交更新等其他操作&#xff0c;不使用VsCode,IDE全家桶等为载体搭建插件形式的SVN&#xff0c;完全独立搭建 1&#xff1a;安装SVN客…

SVN客户端下载及安装

SVN客户端地址&#xff1a;https://osdn.net/projects/tortoisesvn/# 方法/步骤 官网下载tortoisesvn&#xff0c;下载完成之后&#xff0c;如下图所示&#xff1a; 点击安装进入安装界面&#xff0c;点击接受协议&#xff0c;如下图所示&#xff1a; 选择安装的地址&…

【转】Ubuntu中SVN客户端安装+使用

转自&#xff1a;Ubuntu中SVN客户端安装使用_三少GG-CSDN博客 1、 安装 svn客户端&#xff1a; apt-get install subversion&#xff0c;然后根据提示一步一步&#xff0c;就完成了 svn的安装。当然&#xff0c;也可以源码安装 svn&#xff0c;下载 subversion 一个最新版本的源…

SVN客户端

SVN是Subversion的简称&#xff0c;是一个开源的代码版本控制系统 SVN客户端操作 checkout 检出&#xff1a;初次下载-第一次连接svn服务器时候需要下载对应仓库的数据&#xff08;如果仓库中有数据的话&#xff09;add 新增&#xff1a;新增数据到svn服务器update 更新&#x…

【SVN】windows下的SVN客户端访问ubuntu下的SVN服务器

目录 第一部分 windows创建本地版本库、连接ubuntu的SVN服务器 步骤0&#xff1a; 步骤一&#xff1a;创建windows本地版本库 步骤二&#xff1a;checkout检测 步骤三&#xff1a;输入之前配置的用户名和密码 第二部分 windows上传文件至SVN服务器 步骤一&#xff1a;添加…

SVN 客户端下载与安装

SVN 客户端下载与安装 svn 客户端下载地址&#xff1a;https://tortoisesvn.net/downloads.zh.html 1. 网址截图 2. 汉化包下载安装 下载完毕&#xff0c;双击安装&#xff0c;下一步即可&#xff08;可根据需要进行安装路径选择&#xff09;

windows环境下的svn客户端(VisualSVN Server),服务端(TortoiseSVN),中文化(TortoiseSVN LanguagePack_1.9.7.2)安装和使用(超详细)

一、下载安装包 1.VisualSVN server 服务端下载&#xff1a;VisualSVN Server 2.svn客户端下载&#xff1a;TortoiseSVN 3.中文化包下载&#xff1a;TortoiseSVN LanguagePack_1.9.7.27907-x64-zh_CN中文包 二、安装软件 1.安装VisualSVN server 服务端&#xff1a; &#xf…

SVN客户端安装及操作文档

第一部分&#xff1a;客户端安装 1 在D盘创建svnclient文件夹&#xff0c;并将svn安装包复制到svnclient文件夹中 2 客户端安装 双击文件“TortoiseSVN-1.14.1.29085-x64-svn-1.14.1.msi” 点击“Next” 点击“Next” 点击“Browse”选择安装路径&#xff0c;这里将安装路径…