linux so 動態庫中全局變量 被覆蓋問題

問題描述

迴歸正題,前段時間項目開發中,實現了一個動態庫,封裝了一些方法。然後基於這個動態庫,實現了一個應用程序。應用程序中含有全局變量A,動態庫中也含有全局變量A,當我調用動態庫中函數後,發現應用程序的A發生了變化!!!O,My God!對於我這種還沒在Linux下做過開發的人來說,一頭霧水。。。。。。 於是我嘗試着,將A中的變量名稱改爲B,這樣問題也就沒有了~~~

 

原因

 

應用程序進行鏈接的時候,動態庫中全局變量定義,將會被應用程序中同名的全局變量所覆蓋。這樣也就造成了,在動態庫中修改A變量時,應用程序中的A也發生了變化。

解決方法

在創建動態鏈接庫時,gcc/g++選項中添加編譯選項

-Wl,-Bsymbolic.


其中Wl表示將緊跟其後的參數,傳遞給連接器ld。Bsymbolic表示強制採用本地的全局變量定義,這樣就不會出現動態鏈接庫的全局變量定義被應用程序的同名定義給覆蓋了!

 

https://blog.csdn.net/lcalqf/article/details/78129697?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-26.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-26.nonecase

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