在《linux下動態鏈結庫的建立與應用》 一文中,我介紹了linux動態鏈結庫的基本知識.其要點是:使用者根據實際情況需要,利用dlopen,dlsym,dlclose等動態鏈結庫操作函 數,裝入指定的動態鏈結庫中指定的函式,然後加以執行.程式中使用很少的動態函式時,這樣的做法尚可.如果程式需要呼叫大量的動態函式,那麼採用這樣的編 程手段將是非常繁複的,所以我們必須使用一種更為聰明的辦法,以減少**量,提高工作效率.這就是現在我要舉例介紹的《linux動態鏈結庫高階應用》.
注:本文舉的例子類似上篇文章,只是檔案的內容已做相應修改,裁減了不少.示例程式ady.c和兩個動態函式的源程式getdate.c與gettime.c僅修改了標頭檔案的名字,其內容不再列出.本文使用標頭檔案為adatetime.h.
要想高效地應用linux動態鏈結庫(尤其是使用者自己編寫的),需要做以下工作:
一、編寫合格的動態鏈結庫標頭檔案
c語言的標頭檔案,可供乙個或多個程式引用,裡面一般定義程式所需的常量,自定義型別及函式原型說明等.其中的函式原型說明,則供編譯器檢查語法,用於排除引用引數時型別不一致的錯誤.只有編寫合格的動態鏈結庫標頭檔案,程式設計師才能正確使用動態鏈結庫內的函式.
動態鏈結庫標頭檔案要採用c語言標準格式,其中的動態函式原型定義,不必象上文介紹的那樣用(*動態函式名)的描述形式.請看下面的例子:(每行開始的數字為所在行行號,為筆者新增,供註解使用)1 2
3 #ifndef __datetime_h
45 #define __datetime_h67
8 typedef struct
9 datetype;
1415
16 typedef struct
17 timetype;
2223 int getdate(datetype *d);
24 int gettime(timetype *t);
動態鏈結庫 靜態鏈結庫
包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...
靜態鏈結庫 動態鏈結庫
庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...
靜態鏈結庫,動態鏈結庫
關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...