在使用動態庫的過程中,a.out回車載入器呼叫動態聯結器,屬於乙個自動的載入,程式中可以由程式設計師向系統發起申請,將庫載入到記憶體,這種叫動態載入。
dlopen(3) dlclose(3) dlerror(3) dlsym(3) …
void *dlopen(const char* filename, int flags)
filename: 指定載入共享庫的檔名,為空返回main
flags :
rtld_lazy : 只有在動態庫里的符號被引用的時候才
rtld_now:立即引用
返回值:錯誤返回null 成功返回非null。可以使用dlerror()診斷函式的錯誤的原因
int dlclose(void *handle);
功能:關閉共享庫(引用計數減1,減到0就從記憶體unload)
handle: 指定要關閉的共享庫
返回:成功0 失敗非0
void *dlvsym(void *handle, char *symbol, char *version);
功能:從共享庫里找到符號的位址,並返回
handle:指定共享庫
symbol :指定符號的名字
返回值:成功返回symbol載入到記憶體的位址,錯誤返回null,可以使用dlerror探測
#include
#include
typedef
int(
*f_t)
(int
,int);
//通過命令列的第乙個引數傳遞共享庫的檔名
intmain
(int argc,
char
*ar**)
//使用共享庫中的函式
printf
("dlopen success...\n");
//在動態庫中找函式
f_t f =
(f_t)
dlsym
(h,"add");
if(f==
null
)//到這裡f中存放的是add的位址
printf
("3+4=%d\n",f
(3,4
));//關閉乙個共享庫
dlclose
(h);
return0;
}
在執行這個檔案之前,保證要有乙個動態庫,詳情可見c語言學習之函式庫的製作和使用
C語言學習之動態記憶體管理
1 問什麼要動態記憶體管理?在進行資料儲存的時候,我們經常的做法是利用陣列開闢指定大小的空間用以儲存資料,但是陣列的具體大小取決於輸入的資料,因此往往在程式執行時才知道所需陣列的記憶體空間的大小。為了達到對記憶體空間的合理使用,這就要就我們根據輸入資料的不同來開闢不同大小的記憶體空間,繼而出現動態記...
C語言學習筆記 動態陣列
陣列是c語言中的很重要的一種構造型別,最初我們學習的都是靜態陣列,但是,靜態陣列有著自己難以改變的缺點 陣列長度固定。一般在靜態陣列定義後,系統就會為其分配對應長度的連續的專有記憶體空間,可是,我們都知道,不同的執行樣例,所需要的陣列長度是不一樣的,為了所有樣例都可以執行,一般我們會將陣列長度設定為...
C語言學習之常量
1.整型常量 像123這一型別常量如無特別說明都是int型別常量。long型常量要以l或l結尾,比如123456789l。無符號常量要以u或u結尾。整型常量除了用十進位制表示外,還可以用八進位制和十六進製制表示,八進位制前面加0 零 十六進製制前面加0x。2.字元常量 字元常量用 表示,比如 y 本...