libevent使用<一> libevent匯入專案

CL.TANG發表於2013-10-27

最近做mysql代理層讀寫分離,發現在C,C++領域libevent很厲害的樣子。  

1. 安裝libevent

    linux下原始碼安裝或者直接yum安裝。

    libevent只是一套對一些底層技術的封裝,自己本身並不像其他linux使用yum安裝的軟體一樣會在/usr/bin/下有可執行檔案,他只是一套動態連結庫。即你可以在你的C程式中使用他.

    

yum install libevent
yum install libevent-devel

  如果是原始碼安裝,可能會麻煩點,因為你在指定安裝路徑的時候,可能和系統不識別的庫不錄不一致,比如你係統是64位的,你卻將動態連線庫裝在了你的當前目錄/root/,那麼這樣需要將你當前這臺機器的/etc/ld.conf.d/下增加一個檔案,名字任意,內容為/root

  儲存退出後指定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到我們自己的專案中,在當前路徑下該更能識別了吧。

  2. 建立專案。

  最簡單的專案其實就是一個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下的標頭檔案,當然找到標頭檔案並沒有多大用,還的找到標頭檔案中定義的那些方法的原始碼生成的動態庫的位置。

相關文章