最近作mysql代理層讀寫分離,發如今C,C++領域libevent很厲害的樣子。 mysql
1. 安裝libeventlinux
linux下源碼安裝或者直接yum安裝。sql
libevent只是一套對一些底層技術的封裝,本身自己並不像其餘linux使用yum安裝的軟件同樣會在/usr/bin/下有可執行文件,他只是一套動態連接庫。即你能夠在你的C程序中使用他.緩存
yum install libevent
yum install libevent-devel
若是是源碼安裝,可能會麻煩點,由於你在指定安裝路徑的時候,可能和系統不識別的庫不錄不一致,好比你係統是64位的,你卻將動態鏈接庫裝在了你的當前目錄/root/,那麼這樣須要將你當前這臺機器的/etc/ld.conf.d/下增長一個文件,名字任意,內容爲/rootspa
保存退出後指定ldconfig,ldconfig是linux系統的搜索系統下默認搜尋目錄(/lib和/usr/lib)以及動態庫配置文件/etc/ld.so.conf內所列的目錄下,搜索出可共享的動態 連接庫(格式如前介紹,lib*.so*),進而建立出動態裝入程序(ld.so)所需的鏈接和緩存文件.緩存文件默認爲 /etc/ld.so.cache,此文件保存已排好序的動態連接庫名字列表。即ldconfig是找到了咱們本身的/root目錄下的全部動態庫名而且存入了/etc/ld.so.cache緩存文件。在咱們程序運行過程當中,就會動態連接到/etc/ld.so.cache文件中指明的文件了。代理
例外,因爲咱們是使用的yum的安裝方式安裝的libevent-devel,因此其頭文件都是仿製在該計算機系統識別的默認路徑上,若是咱們直接使用gcc就根本不用指定頭文件的地址。固然若是咱們沒有安裝libevent-devel,也能夠copy到咱們本身的項目中,在當前路徑下該更能識別了吧。code
2. 建立項目。blog
最簡單的項目其實就是一個C文件開發
#include <stdio.h> #include "event.h" int main() { printf("helloworld~\n"); struct event_base *events; }
執行源碼
gcc test.c
能夠看到生成了一個a.out文件
執行
./a.out
能夠獲得輸出,而且證實/usr/include 下的event.h是在gcc中是默認識別的。而且建立一個一個未使用的結構提events.
由以上得出:
linux在使用gcc對源碼進行編譯的時候,除了開發者本身指定的路徑,當前路徑,還包括系統本身默認的路徑,好比/usr/lib64,就包括不少so動態連接庫,而所謂的動態連接庫是由C或C++程序經過GCC生成的不帶main方法的一對程序集合,這些程序集合能夠給其餘main程序提供支持,固然同時得有頭文件的定義。動態連接的意思是在程序已經編譯經過,在運行過程當中連接該連接庫中的代碼的過程,而靜態連接是直接將靜態連接庫做爲咱們代碼中的一部分進行編譯,這樣作程序執行速度會比較快,可是對於系統存儲空間會佔用的比較多。
另外頭文件在系統中使用yum install *-devel 會安裝到/usr/include中,包括 kernel的頭文件,會存儲在/usr/include/sys中,因此咱們在一些C程序中會看到:
#include <sys/epoll.h>
這樣的代碼,實際上就是去找到了/usr/include/sys/epoll.h下的頭文件,固然找到頭文件並無多大用,還的找到頭文件中定義的那些方法的源碼生成的動態庫的位置。