libevent(1)-源码编译安装和基础函数介绍

1. 编译安装

官方网站:https://libevent.org/

1.1 安装方式1: 从GitHub下载源码编译安装

# 1. 从libevent官网获取github的地址后,使用git clone源码
[wengjh@QingYun git]$ git clone https://github.com/libevent/libevent.git

# 2. 编译源码
[wengjh@QingYun git]$ cd libevent/
[wengjh@QingYun libevent]$ mkdir build
[wengjh@QingYun libevent]$ cd build/
[wengjh@QingYun build]$ cmake3 ..
[wengjh@QingYun build]$ make
[wengjh@QingYun build]$ sudo make install
[wengjh@QingYun build]$ make verify   # 校验安装结果,耗时有点久可以不执行

如果是想学习源码的同学建议使用这种方式安装,方便修改源码后重新编译和调试源码

1.2 安装方式2: 从官网下载安装包编译安装

$ wget 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
$ cd libevent-2.1.12-stable/
$ ./configure
$ make
$ sudo make install

生产环境下建议使用这种方式安装,官方正式发布的版本一般是更可靠的版本

1.3 验证安装

[wengjh@QingYun libevent]$ whereis libevent
libevent: /usr/local/lib/libevent.so /usr/local/lib/libevent.la /usr/local/lib/libevent.a
[wengjh@QingYun libevent]$

1.4 运行官方demo

# 启动服务端:hello-world【方式1的执行文件在build/bin/下,方式2的执行文件在安装目录的sample路径下】
[wengjh@QingYun sample]$ ./hello-world
flushed answer

# 启动客户端
[wengjh@QingYun ~]$ nc 127.0.0.1 9995
Hello, World!

到这里,安装已经结束。

2. 建立测试代码

建立测试代码是为了学习源码时方便调试而建立的测试目录、测试代码、测试代码的make文件

2.1 创建目录

[wengjh@QingYun libevent]$ mkdir test-wjh
[wengjh@QingYun libevent]$ cd test-wjh
[wengjh@QingYun test-wjh]$ vim CMakeLists.txt    # 创建 CMakeLists.txt 文件
[wengjh@QingYun test-wjh]$ vim hello_event.cpp   # 创建 hello_event.cpp 测试代码

2.2 创建CMakeLists.txt

cmake_minimum_required(VERSION 3.1.2)
SET(CMAKE_BUILD_TYPE DEBUG)
SET(CMAKE_CXX_STANDARD 11)

PROJECT(test_event)
INCLUDE_DIRECTORIES(/usr/local/include)
ADD_EXECUTABLE(hello_event hello_event.cpp)

LINK_DIRECTORIES(/usr/local/lib)
TARGET_LINK_LIBRARIES(hello_event libevent.so)

2.3 创建hello_event.cpp

#include 
// 使用libevent库所需头文件
#include 

void on_time(int sock, short event, void *arg)
{
    printf("hello event.\n");

    struct timeval tv;
    tv.tv_sec = 1;
    tv.tv_usec = 0;

    // 事件执行后,默认就被删除,所以需要重新添加
    event_add((struct event *)arg, &tv);
}

int main()
{
    //  初始化事件
    event_init();

    //  设置定时器回调函数
    struct event ev_time;
    evtimer_set(&ev_time, on_time, &ev_time);

    // 1s运行一次func函数
    struct timeval tv;
    tv.tv_sec = 1;
    tv.tv_usec = 0;

    // 添加到事件循环中
    event_add(&ev_time, &tv);

    // 程序等待就绪事件并执行事件处理
    event_dispatch();

    return 0;
}

2.4 编译和运行测试用例

[wengjh@QingYun test-wjh]$ mkdir build && cd build
[wengjh@QingYun test-wjh]$ make
[ 50%] Building CXX object CMakeFiles/hello_event.dir/hello_event.cpp.o
[100%] Linking CXX executable hello_event
[100%] Built target hello_even
[wengjh@QingYun test-wjh]$ ./hello_event
hello event.
hello event.
...

你可能感兴趣的:(#,libevent,c++,网络通信)