前言
之前看网上有人推荐C语言的开源项目,看到有人推荐:redis、nginx,libevent等,自己选了一个 libevent 作为本次学习的对象。
想了解某个东西,先要学会使用它。这里我们先到libevent官网上去下载源码(应该是https://github-cloud.s3.amazonaws.com 网站被封了,导致下载不了),最后只好去github上clone了一份(说到这个真心累,龟速…)。
准备工作
在安装libevent之前,需要先安装了两个工具:一个是 automake 和 libtool
(如果之前已经安装过,则可以忽略,如果不安装这两个工具,则在安装libevent时会出现以下提示信息),在Ubuntu上可以直接通过 sudo apt-get install XXX
命令来安装这两个工具。
"possibly undefined macro: AC_PROG_LIBTOOL"
解决办法:
sudo apt-get install automake
sudo apt-get install libtool
开始安装
下载完之后,按照 libevent 上介绍的步骤进行安装。
安装步骤如下:
$ ./autogen.sh
$ ./configure && make
$ make verify
$ sudo make install
第一步会生成配置文件(configure),另外需要注意权限(比如第四步),权限不够会导致执行失败。
编写测试Demo
参考blog——libevent源码深度剖析三, 其中有一个示例程序,这里称为 test_03.cpp 代码如下:
#include <stdio.h>
#include <iostream>
#include <event.h>
using namespace std;
struct event ev;
struct timeval tv;
void time_cb(int fd, short event, void *argc)
{
printf("timer wake up\n");
event_add(&ev, &tv);
}
int main()
{
struct event_base *base = event_init();
tv.tv_sec = 10;
tv.tv_usec = 0;
evtimer_set(&ev, time_cb, NULL);
event_add(&ev, &tv);
event_base_dispatch(base);
}
注意是c++文件,使用的是g++编译器:
zfchen@zfchen-E440:~/my_repository/libevent/test$ vim test_03.cpp
zfchen@zfchen-E440:~/my_repository/libevent/test$ g++ -o test_03 test_03.cpp -levent
zfchen@zfchen-E440:~/my_repository/libevent/test$ ./test_03
./test_03: error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory
注意编译时有用到 levent库文件,运行时出错,提示缺少文件,在网上查找后发现cannot open shared object file:No such file or directory解决方法。
从错误信息中可以看出问题出在动态链接库上,我们需要手动运行动态链接库的管理命令,目的是为了让动态链接库为系统所共享,使用 ldconfig
命令,如下:
zfchen@zfchen-E440:~/my_repository/libevent$ sudo ldconfig
最后可以看到程序正常执行:
zfchen@zfchen-E440:~/my_repository/libevent/test$ ./test_03
timer wake up
timer wake up
timer wake up
timer wake up