🛠️二,libevent 安装与环境搭建

编译安装

本章节主要介绍如何在linux环境中下载libevent源码,并进行编译安装。

进入 libevent 官方网站

image-20240906223857509

这里选择最新版本libevent-2.1.12-stable.tar.gz 下载。下载后传入到linux服务器中。

直接编写一个shell编译脚本进行编译,方便编译参数设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 获取当前目录
cur_dir=`pwd`

# 解压libevent
tar -xzf libevent-2.1.12-stable.tar.gz

# 进入源码目录
cd libevent-2.1.12-stable

# 生成configure文件
./autogen.sh

# --prefix=$cur_dir/libevent_build
# 设置编译安装路径,也就是当前目录下的libevent_build文件夹
# --enable-shared=no
# 不编译动态库
# --enable-static=yes
# 编译静态库
# --disable-openssl
# 不启用openssl
./configure --prefix=$cur_dir/libevent_build --enable-shared=no --enable-static=yes --disable-openssl

# 编译安装
make -j
make install

执行libevent编译安装脚本

1
./build.sh

等待编译完成后,可以看到当前路径中内容如下:

1
2
3
4
5
6
ls -hlt
total 1.1M
drwxr-xr-x 5 xutopia xutopia 4.0K Sep 6 22:50 libevent_build
drwxr-xr-x 13 xutopia xutopia 4.0K Sep 6 22:50 libevent-2.1.12-stable
-rwxr-xr-x 1 xutopia xutopia 558 Sep 6 22:50 build.sh
-rw-r--r-- 1 xutopia xutopia 1.1M Sep 6 22:41 libevent-2.1.12-stable.tar.gz

程序验证

装完成后,可以通过编译一个简单的示例程序来验证 libevent 是否正确安装。以下是一个简单的 C 语言示例程序,用于创建一个简单的定时器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* @brief 测试验证libevent程序
* 编译测试程序
* gcc main.c -I./libevent_build/include -o main -L./libevent_build/lib -levent
*
* @author x (x@x.com)
* @date 2024-09-06
* @version 0.1
*
* @copyright Copyright (c) 2024
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <event2/event.h>

static void timer_callback(evutil_socket_t fd, short event, void *arg) {
printf("Timer run!\n");
}

int main() {
struct event_base *base;
struct event *timer;

base = event_base_new();
if (!base) {
fprintf(stderr, "Failed to create event base\n");
return 1;
}

timer = event_new(base, -1, EV_PERSIST, timer_callback, base);
if (!timer) {
fprintf(stderr, "Failed to create timer event\n");
event_base_free(base);
return 1;
}

// 设置定时器时间为 2 秒
struct timeval delay = {2, 0};
event_add(timer, &delay);

// 启动事件循环
event_base_dispatch(base);

// 清理资源
event_free(timer);
event_base_free(base);

return 0;
}

如果一切正常,你应该看到输出:

1
2
3
4
#./main 
Timer run!
Timer run!
Timer run!