-Bsymbolic:优先使用本地符号
問(wèn)題描述
前段時(shí)間項(xiàng)目開(kāi)發(fā)中,實(shí)現(xiàn)了一個(gè)動(dòng)態(tài)庫(kù),封裝了一些方法。然后基于這個(gè)動(dòng)態(tài)庫(kù),實(shí)現(xiàn)了一個(gè)應(yīng)用程序。應(yīng)用程序中含有全局變量A,動(dòng)態(tài)庫(kù)中也含有全局變量A,當(dāng)我調(diào)用動(dòng)態(tài)庫(kù)中函數(shù)后,發(fā)現(xiàn)應(yīng)用程序的A發(fā)生了變化!!!O,My God!對(duì)于我這種還沒(méi)在Linux下做過(guò)開(kāi)發(fā)的人來(lái)說(shuō),一頭霧水。。。。。。 于是我嘗試著,將A中的變量名稱改為B,這樣問(wèn)題也就沒(méi)有了~~~
原因
應(yīng)用程序進(jìn)行鏈接的時(shí)候,動(dòng)態(tài)庫(kù)中全局變量定義,將會(huì)被應(yīng)用程序中同名的全局變量所覆蓋。這樣也就造成了,在動(dòng)態(tài)庫(kù)中修改A變量時(shí),應(yīng)用程序中的A也發(fā)生了變化。
解決方法
在創(chuàng)建動(dòng)態(tài)鏈接庫(kù)時(shí),gcc/g++選項(xiàng)中添加編譯選項(xiàng)
-Wl,-Bsymbolic.
其中Wl表示將緊跟其后的參數(shù),傳遞給連接器ld。Bsymbolic表示強(qiáng)制采用本地的全局變量定義,這樣就不會(huì)出現(xiàn)動(dòng)態(tài)鏈接庫(kù)的全局變量定義被應(yīng)用程序/動(dòng)態(tài)鏈接庫(kù)中的同名定義給覆蓋了
?
總結(jié)
以上是生活随笔為你收集整理的-Bsymbolic:优先使用本地符号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: javascript对页面简单的加密和解
- 下一篇: bat/cmd将命令执行的结果赋值给变量