【Linux系统编程】libevent库介绍与安装
libevent库介绍与安装
libevent介绍
libevent是一个异步事件处理软件函式库。libevent是一个提供异步事件通知的软件库。libevent提供了一组应用程序编程接口(API),libevent API提供的机制允许开发者为事件注册回调函数,例如文件描述符上的发生了特定事件或者等待特定事件超时,接收到信号的事件,常规的定时器超时事件。当事件发生时,libevent实例会执行回调函数。libevent 在设计上是用来替代很多事件驱动网络服务器自行实现的事件循环框架的。 也就是说,libevent可以用来取代网络服务器所使用的事件循环检查框架。
libevent 现在支持 /dev/poll,kqueue(2),POSIX select(2),Windows IOCP,poll(2),epoll(7),和 Solaris端口。libevent 对实时信号有试验性支持。libevent 暴露出的 API 在全平台都是一致的,因此 libevent 支持可移植的应用程序开发,并提供“操作系统上最可扩展的事件通知机制”。
开发者通过 libevent 注册信号回调,可以编写“安全”的信号处理程序,因为用户提供的信号处理程序都不会在信号 处理上下文中运行。
由于可以省去对网络的处理,且拥有不错的性能,有些软件使用libevent作为网络底层的函式库,如:memcached、Tor。(维基百科)
libevent安装
- 去官网(https://libevent.org/)获取下载链接。
- 使用wget下载压缩包
wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
- 解压缩
tar -xzf libevent-2.1.12-stable.tar.gz
- 进入目录
cd libevent-2.1.12-stable
- 执行配置
./configure
,生成 Makefile - 执行
make
,编译源码 - 执行
sudo make install
,将库文件和头文件复制到相应文件夹
问题与解决
configure阶段
问题描述:
configure: error: openssl is a must but can not be found. You should add the directory containing `openssl.pc' to the `PKG_CONFIG_PATH' environment variable, or set `CFLAGS' and `LDFLAGS' directly for openssl, or use `--disable-openssl' to disable support for openssl encryption
解决办法:sudo yum install openssl-devel
make阶段
问题描述:
test/regress_buffer.c: In function ‘test_evbuffer_pullup_with_empty’:
test/tinytest_macros.h:116:15: warning: cast from function call of type ‘unsigned char *’ to non-matching type ‘long int’ [-Wbad-function-cast]
type val1_ = (type)(a); \
^
test/tinytest_macros.h:144:2: note: in expansion of macro ‘tt_assert_test_fmt_type’
tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
^
test/tinytest_macros.h:158:2: note: in expansion of macro ‘tt_assert_test_type’
tt_assert_test_type(a,b,#a" "#op" "#b,long,(val1_ op val2_), \
^
test/regress_buffer.c:444:2: note: in expansion of macro ‘tt_int_op’
tt_int_op(evbuffer_pullup(buf, -1), ==, NULL);
^
问题解决:没关系,不用管
编译自己的源文件找不到库
问题描述:
./hello-word: error while loading shared libraries: libevent-2.1.so.7: cannot open shared object file: No such file or directory
问题解决:
- 使用
sudo vim
打开/etc/ld.so.conf
,在末尾加新行/usr/local/lib
。 - 执行
sudo ldconfig
。