C 動態載入動態庫 AIX

2021-06-07 20:33:35 字數 1415 閱讀 4330

部分內容**[

函式說明:

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即可。好,切入正題。結構找到了,不過很多函式沒有找到,在網上也沒找到好方法。最後...