動態鏈結庫的使用

2022-08-09 13:45:18 字數 788 閱讀 5669

動態鏈結庫(.so)可以讓程式在執行時被載入,當so修改時,使用程式不需要重新編譯就可以使用。本文介紹幾個函式,講述so的載入和方法呼叫。

void * dlopen( const char * pathname, int mode);
以指定模式開啟某動態鏈結庫檔案,返回控制代碼。

模式有:rtld_lazy, rtld_now; rtld_global, rtld_loacal;rtld_nodelete, rtld_noload,rtld_deepbind

void* dlsym(void* handle, const char* symbol)
handle是由dlopen開啟動態庫返回的指標,symbol是要獲取的函式或全域性變數的名稱,返回值是指向函式的位址,供後續呼叫。

int dlclose(void* handle)
關閉動態庫,handle是dlopen返回的控制代碼。只有當次動態庫的使用計數為0時,才會真正被系統解除安裝。

例項:被呼叫的**

a* geta()

class a

}

編譯成a.so,主程式呼叫

//函式指標

a* (*pgeta)();

void* handle = dlopen("a.so", rtld_lazy);

pgeta = (a* (*)())dlsym(handle, "geta");

a* a = (*pgeta)();

a->say();

dlclose(handle);

動態鏈結庫使用 靜 動態鏈結庫使用總結

一 靜態庫編寫 1.首先當然是開vs然後建立乙個靜態庫工程啦 2.格式.一般有標頭檔案.h和原檔案.cpp,當然你也可以寫一在乙個cpp裡.mydll.h extends c mydll.cpp include mylib.h int sum int num1,int num2 int mult i...

使用動態鏈結庫

1.動態鏈結庫是程式執行時載入的庫,當動態鏈結庫正確安裝後,所有的程式都可以使用動態庫來執行程式。動態鏈結庫是目標檔案的集合,目標檔案在動態鏈結庫中的組織方式是按照特殊方式形成的。庫中函式和變數的位址是相對位址,不是絕對位址,其真實位址在呼叫動態庫的程式載入時形成。2.動態鏈結庫的名稱有別名 son...

使用動態鏈結庫

1.先建立乙個動態鏈結庫的工程 vs下,file new project win32 project dll t.h ifdef myapi export define myapi declspec dllexport else define myapi declspec dllimport end...