前言
首先我閱讀的版本是libevent-1.4.14b-stable版本。1.4系列雖然比較古老,但是它的源碼相對簡單,便於學習,並且主要的思想與2.0系列是一致的。
附上官網鏈接:http://libevent.org/
安裝及簡單使用libevent
接下來我們直接進入正題,安裝libevent-1.4。
1. 在官網上下載對應版本的包
2. tar -zxvf /your path/libevent-1.4.14b-stable.tar.gz
解壓到當前目錄
3. cd libevent-1.4.14b-stable
4. ./configure
5. make && make install
6. 在/usr/local/lib
目錄下應該可以看見大量的動態鏈接庫了,這時運行ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
命令(這是爲了防止在系統默認路徑下 找不到庫文件,也可以使用gcc中的-L參數來指定庫文件的位置所在)
7. 接下來就可以使用libevent庫來編寫我們的代碼了
簡單的例子(現在看不懂沒關係):
#include <stdio.h>
#include <stdio.h>
//使用libevent庫所需頭文件
#include <event.h>
void on_time(int sock,short event,void *arg)
{
printf("hello world\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;
}
執行命令gcc demo.c -o demo -levent
編譯
運行./demo
接下來就可以看到終端上每過1s就會打印hello world
出來了。
可能會遇到的問題:
error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
當編譯時出現這個錯誤信息證明gcc沒有找到你的動態鏈接庫。
解決方法:
可能的原因有兩個:
1. 你忘了執行上面提到的ln -s....
命令,這是因爲運行時動態庫的搜索路徑默認是/lib
以及/usr/lib
路徑。或者可以使用gcc demo.c -o -L/your_path demo
來指定動態鏈接庫的位置。
2. 如果還是不行, 運行命令ldconfig
生效。
ldconfig通常在系統啓動時運行,而當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令進行更新。