建立動態庫時,建議使用的鏈結選項Bsymbolic

2021-08-17 07:43:18 字數 630 閱讀 8457

題外話:最近了解了一種輕量級標記語言,叫做markdown.可以使用markdown易讀的文字格式,然後將其轉換為html格式。雖然才知道,發現這個語法已經在無處不在了,著名的stack overflow發帖,以及一些wiki,或者一些部落格都支援這種語法編輯了。ok,那麼博主,這次也嘗試下,本次部落格採用的是markdownpad編輯器編寫。

回歸正題,前段時間專案開發中,實現了乙個動態庫,封裝了一些方法。然後基於這個動態庫,實現了乙個應用程式。應用程式中含有全域性變數a,動態庫中也含有全域性變數a,當我呼叫動態庫中函式後,發現應用程式的a發生了變化!!!o,my god!對於我這種還沒在linux下做過開發的人來說,一頭霧水。。。。。。 於是我嘗試著,將a中的變數名稱改為b,這樣問題也就沒有了~~~

應用程式進行鏈結的時候,動態庫中全域性變數定義,將會被應用程式中同名的全域性變數所覆蓋。這樣也就造成了,在動態庫中修改a變數時,應用程式中的a也發生了變化。

在建立動態鏈結庫時,gcc/g++選項中新增編譯選項

-wl,-bsymbolic.

其中wl表示將緊跟其後的引數,傳遞給聯結器ld。bsymbolic表示強制採用本地的全域性變數定義,這樣就不會出現動態鏈結庫的全域性變數定義被應用程式/動態鏈結庫中的同名定義給覆蓋了!

建立和使用動態鏈結庫

在本演練中,您將建立乙個動態鏈結庫 dll 其中包含可供其他應用程式使用的有用例程。使用 dll 是一種重用 的絕佳方式。您不必在自己建立的每個程式中重新實現這些例程,而只需對這些例程編寫一次,然後從需要該功能的應用程式引用它們即可。本演練使用本機 c 有關使用本機 c 建立靜態庫的演練,請參見 演...

使用Xenomai建立動態鏈結庫

專案中需要xenomai建立實時週期的任務,並封裝為動態鏈結庫,這裡記錄下遇到的問題。按照 qt編譯xenomai使用者層程式 中的步驟設定,建立好動態庫工程之後。編譯,會發生如下錯誤 1 error usr xenomai lib xenomai bootstrap.o relocation r ...

動態鏈結庫的建立

動態鏈結庫的建立 使用匯出函式關鍵字 declspec dllexport 建立 mydll.h extern c declspec dllexport int max int a,int b extern c declspec dllexport int min int a,int b inclu...