最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux 下同名符號(hào)沖突問(wèn)題解決方案

 更新時(shí)間:2017年06月15日 11:41:06   投稿:lqh  
這篇文章主要介紹了 linux 下同名符號(hào)沖突問(wèn)題解決方案的相關(guān)資料,需要的朋友可以參考下

linux 下同名符號(hào)沖突問(wèn)題解決方案

最近的工作中遇到如下的問(wèn)題:

Linux 下有三個(gè)模塊aa、bb、cc,基本情況如下:

cc 編譯連接得到 cc.so 動(dòng)態(tài)庫(kù),cc 中有如下接口:

cc_fun 
{ 
…… 
do();//調(diào)用名為do的cc模塊內(nèi)部函數(shù) 
…… 
} 
 

bb 編譯連接得到 bb.a 靜態(tài)庫(kù),bb 中有如下接口:

bb_fun 
{ 
…… 
handle = dlopen(cc.so, RTLD_LAZY);//加載cc.so 
pccfun = dlsym(handle, “cc_fun”);//獲取cc_fun函數(shù)指針 
(*pccfun)();//調(diào)用cc_fun函數(shù),此時(shí)應(yīng)該會(huì)調(diào)用cc模塊中的do()函數(shù) 
do();//調(diào)用名為do的bb模塊內(nèi)部函數(shù)(與cc模塊中的do()函數(shù)同名,實(shí)現(xiàn)卻不相同) 
…… 
} 

aa 編譯后通過(guò) -lbb 鏈接選項(xiàng)的方式連接 bb.a 得到 aa 可執(zhí)行程序,并調(diào)用 bb.a 的接口函數(shù) bb_fun():

main 
{ 
…… 
bb_fun();//調(diào)用bb_fun函數(shù) 
…… 
} 
 

工作中發(fā)現(xiàn) aa 在運(yùn)行時(shí)行為異常,總是有內(nèi)存泄露和功能異常,通過(guò)定位發(fā)現(xiàn)問(wèn)題集中在同名的 do() 函數(shù)上。通過(guò)輸出打印發(fā)現(xiàn)程序中兩次調(diào)用 do() 函數(shù)都調(diào)用到了 bb 模塊中的 do() 函數(shù),而 cc 模塊中的 do() 函數(shù)從未被調(diào)用到,導(dǎo)致程序行為異常和內(nèi)存泄露。

后經(jīng)多方查證了解到因?yàn)?linux 程序中各個(gè)庫(kù)中的符號(hào)表最終都會(huì)加載到程序所在的全局符號(hào)表中,此時(shí)如果有同名符號(hào)就只能調(diào)用到第一個(gè)加載進(jìn)來(lái)的符號(hào),也就是說(shuō)后邊加載的同名符號(hào)都會(huì)被之前的覆蓋。cc 模塊中的 do() 函數(shù)被 bb 模塊中的 do() 函數(shù)覆蓋了,所以無(wú)法被調(diào)用到。

廢話不多說(shuō)。。。

在試驗(yàn)過(guò)很多不滿(mǎn)意的方法之后,最終的解決方法如下:

1.在 cc 的 makefile 中加入 -Wl,-Bsymbolic -Wl,--version-script,version 的連接選項(xiàng),意思是用 version 文件中的腳本指定其導(dǎo)出哪些函數(shù)。

2.version 文件的實(shí)現(xiàn)如下:

VERS{ 
global: 
cc_fun; 
local: *; 
}; 

意思是指定 cc 模塊只導(dǎo)出接口函數(shù) cc_fun,其余函數(shù)都設(shè)為 local 不做導(dǎo)出。

將該文件保存在 makefile 所在目錄即可。

3.重新編譯連接三個(gè)模塊,問(wèn)題解決。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • shell腳本一鍵部署docker的實(shí)現(xiàn)步驟

    shell腳本一鍵部署docker的實(shí)現(xiàn)步驟

    作為一名經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,我們經(jīng)常需要使用Docker來(lái)快速部署各種應(yīng)用,本文主要介紹了shell腳本一鍵部署docker的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • linux shell中單引號(hào)、雙引號(hào)、反引號(hào)、反斜杠的區(qū)別

    linux shell中單引號(hào)、雙引號(hào)、反引號(hào)、反斜杠的區(qū)別

    shell可以識(shí)別4種不同類(lèi)型的引字符號(hào): 單引號(hào)字符' 雙引號(hào)字符" 反斜杠字符\ 反引號(hào)字符`的區(qū)別,學(xué)習(xí)shell編程的朋友可以看下
    2013-01-01
  • 在shell腳本中獲取上個(gè)月最后一天的日期方法

    在shell腳本中獲取上個(gè)月最后一天的日期方法

    今天小編就為大家分享一篇在shell腳本中獲取上個(gè)月最后一天的日期方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 深入淺出Shell編程 Shell變量介紹

    深入淺出Shell編程 Shell變量介紹

    先不要管Shell的版本,來(lái)看看Shell 變量,在Shell中有三種變量:系統(tǒng)變量,環(huán)境變量,用戶(hù)變量。其中用戶(hù)變量在編程過(guò)程中使用最多,系統(tǒng)變量在對(duì)參數(shù)判斷和命令返回值判斷會(huì)使用,環(huán)境變量主要是在程序運(yùn)行的時(shí)候需要設(shè)置。
    2013-01-01
  • 腳本自動(dòng)添加crontab示例

    腳本自動(dòng)添加crontab示例

    這篇文章主要介紹了腳本自動(dòng)添加crontab示例,需要的朋友可以參考下
    2014-04-04
  • Linux?中的export與alias命令詳解

    Linux?中的export與alias命令詳解

    export和alias都是用來(lái)簡(jiǎn)化命令行輸入的工具。export用于設(shè)置環(huán)境變量,環(huán)境變量是一些系統(tǒng)級(jí)別的變量,用于指定一些系統(tǒng)的默認(rèn)值或者搜索路徑等,這篇文章主要介紹了Linux?中的export與alias命令,需要的朋友可以參考下
    2023-04-04
  • Shell腳本break和continue命令簡(jiǎn)明教程

    Shell腳本break和continue命令簡(jiǎn)明教程

    這篇文章主要介紹了Shell腳本break和continue命令簡(jiǎn)明教程,break和continue命令用來(lái)在未達(dá)到循環(huán)結(jié)束條件時(shí)強(qiáng)制跳出循環(huán),需要的朋友可以參考下
    2014-07-07
  • shell腳本4種執(zhí)行方式

    shell腳本4種執(zhí)行方式

    Linux中shell腳本的執(zhí)行通常有4種方式,分別為工作目錄執(zhí)行,絕對(duì)路徑執(zhí)行,sh執(zhí)行,shell環(huán)境執(zhí)行。這篇文章主要介紹了shell腳本4種執(zhí)行方式 ,需要的朋友可以參考下
    2019-05-05
  • shell腳本換行問(wèn)題實(shí)戰(zhàn)記錄

    shell腳本換行問(wèn)題實(shí)戰(zhàn)記錄

    換行相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于shell腳本換行問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 一天一個(gè)shell命令 文本操作系列-linux dd使用教程

    一天一個(gè)shell命令 文本操作系列-linux dd使用教程

    dd 是 Linux/UNIX 下的一個(gè)非常有用的命令,作用是用指定大小的塊拷貝一個(gè)文件,并在拷貝的同時(shí)進(jìn)行指定的轉(zhuǎn)換
    2016-05-05

最新評(píng)論

涞源县| 马山县| 平和县| 北流市| 罗山县| 永胜县| 西乡县| 慈溪市| 广水市| 黑河市| 永年县| 大同市| 西藏| 鹤庆县| 浠水县| 龙江县| 民和| 庆元县| 丰原市| 资阳市| 新干县| 桐柏县| 独山县| 黄骅市| 海安县| 贺州市| 石渠县| 县级市| 临泉县| 武邑县| 桐乡市| 梓潼县| 九寨沟县| 南阳市| 漳州市| 新竹县| 兰考县| 十堰市| 铜陵市| 龙陵县| 弋阳县|