免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3356 | 回复: 1
打印 上一主题 下一主题

[其他] 动态库和静态库强弱符号链接问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-02 21:11 |只看该作者 |倒序浏览
(代发)
先来个例子说明
x86_64平台 gcc编译链接,运行库: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. }
复制代码
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. }
复制代码
main.c

  1. void main()
  2. {
  3.    PrintA();
  4.    PrintB();
  5.    myfunc();
  6. }
复制代码
如果libmya.c和libmyb.c不编成动态链接库,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
复制代码
结果

  1. A
  2. B
  3. myfunc in libmyb
复制代码
如果编译成动态链接库,Makefile如下

  1. A
  2. B
  3. myfunc in libmya
复制代码
第二种情况中,对myfunc符号选择了弱符号的那个,原因在于链接时libmya.so写在前面。
我的问题是,这样的话弱符号在动态库中存在还有什么意义?因为感觉动态库中若符号和强符号一样啊?

下面是两个库中的符号

  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
复制代码
附加lz的问题,就是为啥动态链库链接顺序优先级高于strong和weak,而前面那个静态链接是strong覆盖weak的?{:3_194:}

论坛徽章:
0
2 [报告]
发表于 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新版本认为弱符号对动态链接是没有意义的,弱符号只对静态链接有意义。于是。。。

lz。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP