亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3377 | 回復(fù): 1
打印 上一主題 下一主題

[其他] 動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)強(qiáng)弱符號(hào)鏈接問(wèn)題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-11-02 21:11 |只看該作者 |倒序?yàn)g覽
(代發(fā))
先來(lái)個(gè)例子說(shuō)明
x86_64平臺(tái) gcc編譯鏈接,運(yùn)行庫(kù):glibc
libmya.c

  1. #include<stdio.h>
  2. void PrintA()
  3. {
  4.    printf("A\n");
  5. }

  6. __attribute__ ((weak))
  7. void myfunc()
  8. {
  9.    printf("myfunc in libmya\n");
  10. }
復(fù)制代碼
libmyb.c

  1. #include<stdio.h>
  2. void PrintB()
  3. {
  4.    printf("B\n");
  5. }
  6. void myfunc()
  7. {
  8.    printf("myfunc in libmyb\n");
  9. }
復(fù)制代碼
main.c

  1. void main()
  2. {
  3.    PrintA();
  4.    PrintB();
  5.    myfunc();
  6. }
復(fù)制代碼
如果libmya.c和libmyb.c不編成動(dòng)態(tài)鏈接庫(kù),Makefile如下

  1. CC=gcc
  2. ALL:main
  3. main:main.c libmya.c libmyb.c
  4.          ${CC} main.c libmya.c libmyb.c -o main -g
  5. clean:
  6.          rm main        *.so *.o *.s
復(fù)制代碼
結(jié)果

  1. A
  2. B
  3. myfunc in libmyb
復(fù)制代碼
如果編譯成動(dòng)態(tài)鏈接庫(kù),Makefile如下

  1. A
  2. B
  3. myfunc in libmya
復(fù)制代碼
第二種情況中,對(duì)myfunc符號(hào)選擇了弱符號(hào)的那個(gè),原因在于鏈接時(shí)libmya.so寫(xiě)在前面。
我的問(wèn)題是,這樣的話弱符號(hào)在動(dòng)態(tài)庫(kù)中存在還有什么意義?因?yàn)楦杏X(jué)動(dòng)態(tài)庫(kù)中若符號(hào)和強(qiáng)符號(hào)一樣?

下面是兩個(gè)庫(kù)中的符號(hào)

  1. fengya@fengya-laptop ~/tmp/weak $ readelf -s libmya.so |grep myfunc
  2.       8: 00000000000005de    18 FUNC    WEAK   DEFAULT   11 myfunc
  3.      47: 00000000000005de    18 FUNC    WEAK   DEFAULT   11 myfunc
  4. fengya@fengya-laptop ~/tmp/weak $ readelf -s libmyb.so |grep myfunc
  5.       8: 00000000000005de    18 FUNC    GLOBAL DEFAULT   11 myfunc
  6.      48: 00000000000005de    18 FUNC    GLOBAL DEFAULT   11 myfunc
復(fù)制代碼
附加lz的問(wèn)題,就是為啥動(dòng)態(tài)鏈庫(kù)鏈接順序優(yōu)先級(jí)高于strong和weak,而前面那個(gè)靜態(tài)鏈接是strong覆蓋weak的?{:3_194:}

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-11-09 21:07 |只看該作者
zz


http://sourceware.org/bugzilla/show_bug.cgi?id=3946

Weak definition only and exclusively have a meaning for static archives.  Old
glibc versions mistakenly implemented it for dynamic linking, too.  This is now
not the default anymore.   Broken code an use LD_DYNAMIC_WEAK.


glibc新版本認(rèn)為弱符號(hào)對(duì)動(dòng)態(tài)鏈接是沒(méi)有意義的,弱符號(hào)只對(duì)靜態(tài)鏈接有意義。于是。。。

lz。。。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP