linux中動態庫libXXX.so
1、動態庫的概念。動態鏈接庫與普通的程序相比而言,沒有main函數,是一系列函數的實現。通過shared和fPIC編譯參數生產so動態鏈接庫文件。程序在調用庫函數時,只需要連接上這個庫即可。
2、動態庫的優點。可以實現進程之間的資源共享。就是說,某個程序的在運行中要調用某個動態鏈接庫函數的時候,操作系統首先會查看所有正在運行的程序,看在內存裏是否已有此庫函數的拷貝了。如果有,則讓其共享那一個拷貝;只有沒有才鏈接載入。這樣的模式雖然會帶來一些“動態鏈接”額外的開銷,卻大大的節省了系統的內存資源。C的標準庫就是動態鏈接庫,也就是說系統中所有運行的程序共享著同一個C標準庫的代碼段。將一些程序升級變得簡單
3、動態庫的創建。例如下面實現一個簡單的整數四則運輸的動態鏈接庫,定義的caculate.h和caculate.c兩個文件,生產libcac.so動態鏈接庫。
4、動態庫的使用。編寫一個測試程序main.c調用此動態鏈接庫的函數。編譯生產可執行文件main如下:gcc main.c -o main -L ./ -lcac (其中-L指明動態鏈接庫的路徑,-l後是鏈接庫的名稱,省略lib)。
5、獲取動態鏈接庫的函數。linux提供dlopen、dlsym、dlerror和dlcolose函數獲取動態鏈接庫的函數。通過這個四個函數可以實現一個插件程序,方便程序的擴展和維護。函數格式如下所示。
dlopen()是一個強大的庫函數。該函數將打開一個新庫,並把它裝入內存。該函數主要用來加載庫中的符號,這些符號在編譯的時候是不知道的。寫個測試程序調用上面生產libcac.so庫如下所示。
6、獲取某個命令執行時需要依賴哪些動態庫,如果有依賴庫找不到,那麽程序會無法正常運行。
# ldd 命令的絕對路徑
3、動態庫的創建。
linux中動態庫libXXX.so