動態鏈結庫(.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...