C語言學習之動態載入

2021-09-29 00:20:39 字數 1302 閱讀 4754

在使用動態庫的過程中,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 本...