動態庫與主程式共享全域性變數

2021-07-29 05:10:46 字數 503 閱讀 6817



曾經在一次寫程式的時候,全域性使用乙個日誌物件,所有的日誌資訊都由此日誌物件寫入檔案。但是發現在動態鏈結庫裡,無法訪問到該全域性物件,後經查詢資料。發現,動態鏈結庫是否能訪問主程式的全域性變數,主程式是否能訪問動態鏈結庫裡定義的全域性變數都是可以通過鏈結指令改變此行為。

主程式訪問動態鏈結庫裡的全域性變數

例如動態庫里定義全域性變數int i, 在主程式裡申明extern int i。 則,主程式訪問的就是動態庫里定義的i。在所有的unix平台上這是預設的行為(注意:實際定義i的 模組的點o檔案,必須同時鏈結到動態庫和主程式上,否則鏈結報錯)。

如果不想讓主程式能訪問動態庫里的全域性變數,則在鏈結動態連線庫的時候,給gcc傳入-wl,-bsymbolic即可。

動態連線庫訪問主程式裡定義的全域性變數

在linux上,鏈結主程式的時候,使用引數-wl,--export-dynamic

在aix上,使用'deferred imports' 並且 enable 'runtime linking'.

主程式與DLL之間的全域性變數問題

有幾個朋友經常向我問題在dll中怎麼共用乙個全域性變數。比如像使用者登陸後的使用者名稱 username 其實這個問題很簡單。下面我把我的做法寫出來大家一起分享。把共享的變數放在主程式裡 username,等等,在主程式裡寫兩個函式 function curusername pchar begin ...

主程式與DLL之間的全域性變數問題

有幾個朋友經常向我問題在dll中怎麼共用乙個全域性變數。比如像使用者登陸後的使用者名稱 username 其實這個問題很簡單。下面我把我的做法寫出來大家一起分享。把共享的變數放在主程式裡 username,等等,在主程式裡寫兩個函式 function curusername pchar begin ...

7 多執行緒 全域性變數 共享全域性變數

多執行緒 全域性變數 共享全域性變數 多執行緒可以對全域性變數進行修改,修改後的結果會影響下乙個執行緒 程序不可以共享全域性變數,子程序是複製父程序的全域性變數,修改後互不影響 from threading import thread import time,random g num 100 def...