在主程序及動態鏈接庫裏的全局變

曾經在一次寫程序的時候,全局使用一個日誌對象,所有的日誌信息都由此日誌對象寫入文件。但是發現在動態鏈接庫裏,無法存取到該全局對象,後經查找資料。發現,動態鏈接庫是否能存取主程序的全局變量,主程序是否能存取動態鏈接庫裏定義的全局變量都是可以通過鏈接指令改變此行爲。

主程序存取動態鏈接庫裏的全局變量

例如動態庫裏定義全局變量int i, 在主程序裏申明extern int i。 則,主程序存取的就是動態庫裏定義的i。在所有的UNIX平臺上這是默認的行爲(注意:實際定義i的 模塊的點o文件,必須同時鏈接到動態庫和主程序上,否則鏈接報錯)。

如果不想讓主程序能存取動態庫裏的全局變量,則在鏈接動態連接庫的時候,給gcc傳入-Wl,-Bsymbolic即可。

動態連接庫存取主程序裏定義的全局變量
在linux上,鏈接主程序的時候,使用參數-Wl,--export-dynamic
在AIX上,使用'deferred imports' 並且 enable 'runtime linking'.

 

PS:在linux 下 加入-export -dynamic 可以實現

 

https://blog.csdn.net/liangyuannao/article/details/8086423

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章