部分內容**[
函式說明:
1. 開啟動態鏈結庫:
#include
void *dlopen(const char *filename, int flag);
該函式返回操作控制代碼,如:
void *phandle = dlopen(strsofilepath, rtld_lazy);
flag:
rtld_lazy: 暫緩決定,等有需要時再解出符號
rtld_now :立即決定,返回前解出所有未決定的符號。
rtld_local :預設的,如果既沒有標誌指定 。在這個庫中定義的符號不是可用來解決在隨 後載入的 庫的引用。
rtld_global :允許匯出符號,這個庫中定義的符號將用於隨後載入的庫符號解析。
3. 關閉動態鏈結庫:
#include
int dlclose(void *handle);
該函式將該.so的引用計數減一,當引用計數為0時,將它從系統中解除安裝。
4. 動態庫錯誤函式:
#include
const char *dlerror(void);
當動態鏈結庫操作函式執行失敗時,dlerror可以返回出錯資訊,返回值為null時
表示沒有錯誤資訊。
示例:1.動態庫** myfunc.cpp
#include extern "c"
int myadd(int a, int b)
xlc編譯命令:
xlc -q64 -o libmyfunc.o -c myfunc.cpp
xlc -q64 -qmkshrobj -o libmyfunc.so libmyfunc.o
2.源程式** mytest.cpp
#include #include int main()
myadd = (int (*)(int, int))dlsym(handle, "myadd");
if ((error = dlerror()) != null)
int temp = myadd(3,4);
printf("temp = [%d]\n", temp);
dlclose(handle);
return 0;
}
xlc編譯命令:
xlc -q64 -brtl -o mytest mytest.cpp
3.執行
./mytest
4.輸出
main begin.
func called.
temp = [7]
總結:1.動態庫名最好為lib***.so
2.動態庫中函式需要宣告為extern "c"
3.編譯主應用程式時需要加-brtl
動態載入動態庫
message函式的宣告你應該知道吧,把它的宣告和下面的語句寫到乙個標頭檔案中 pragma comment lib,a.lib 然後你的對話方塊.cpp中包含這個標頭檔案就可以使用message函式了。如果dll沒有對應的.lib檔案,那麼就只能使用動態載入的方式了。動態呼叫動態庫步驟 1 建立乙...
dlopen動態載入動態庫
為了使程式方便擴充套件,具備通用性,可以採用外掛程式形式。採用非同步事件驅動模型,保證主程式邏輯不變,將各個業務已動態鏈結庫的形式載入進來,這就是所謂的外掛程式。linux提供了載入和處理動態鏈結庫的系統呼叫,非常方便。本文先從使用上進行總結,涉及到基本的操作方法,關於動態鏈結庫的本質及如何載入進來...
動態載入庫
使用vc程式設計時遇到乙個奇怪的情況,包含了,但是編譯器編譯結果告知無法找到hmonitor結構,從vc上 能看到hmonitor結構宣告在windef.h裡,但是包含了還是不行,最後乙個同事告知包含multimon.h即可。好,切入正題。結構找到了,不過很多函式沒有找到,在網上也沒找到好方法。最後...