免费注册 查看新帖 |

Chinaunix

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

[系统管理] Linux共享库文件(.so文件)的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-23 22:31 |只看该作者 |倒序浏览
本帖最后由 icer_repls 于 2012-09-23 22:32 编辑

我对Linux的里面的共享库文件组织方式比较困惑:一个so文件链接来链接去的目的是什么?这样做的意义?
举个例子:

$ file /usr/lib/librt.so
/usr/lib/librt.so: symbolic link to `/lib/librt.so.1'
$ file /lib/librt.so.1
/lib/librt.so.1: symbolic link to `librt-2.11.3.so'
$ file /lib/librt-2.11.3.so
/lib/librt-2.11.3.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

感觉这样很麻烦~请问这样设计的理由是什么?

论坛徽章:
0
2 [报告]
发表于 2012-09-23 22:43 |只看该作者
当/lib/librt-2.11.3.so 升级为/lib/librt-2.11.4.so的时候,你就知道 /lib/librt.so.1 这个软连接的好处了

论坛徽章:
0
3 [报告]
发表于 2012-09-23 23:37 |只看该作者
yanu 发表于 2012-09-23 22:43
当/lib/librt-2.11.3.so 升级为/lib/librt-2.11.4.so的时候,你就知道 /lib/librt.so.1 这个软连接的好处了 ...


可否举个例子详说一下?

我之前遇到过一个案例,想要从jdk1.5升级到1.6,结果利用aptitude install jdk-1.6之后,发现java -version还是1.5版本,不起作用,于是我就将那个软连接自己手动连接到1.6的那个,不知道这算不算一个好处?

论坛徽章:
0
4 [报告]
发表于 2012-09-23 23:49 |只看该作者
本帖最后由 yanu 于 2012-09-23 23:50 编辑
  1. # ls -l /lib64/libc.so.6
  2. lrwxrwxrwx 1 root root 12 May 29 22:25 /lib64/libc.so.6 -> libc-2.15.so
复制代码
  1. # ldd /bin/ls
  2.         linux-vdso.so.1 (0x00007fff0ddff000)
  3.         librt.so.1 => /lib64/librt.so.1 (0x00007f8cd1455000)
  4.         libacl.so.1 => /lib64/libacl.so.1 (0x00007f8cd124c000)
  5.         libc.so.6 => /lib64/libc.so.6 (0x00007f8cd0ea1000)
  6.         libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8cd0c84000)
  7.         /lib64/ld-linux-x86-64.so.2 (0x00007f8cd165e000)
  8.         libattr.so.1 => /lib64/libattr.so.1 (0x00007f8cd0a7f000)
复制代码
libc-2.15.so是glibc的基础库文件,几乎所有的C程序都要用到这个库,
如果ls直接引用/lib64/libc-2.15.so,当glibc升级到2.16,这库文件名字变成/lib64/libc-2.16.so时,ls就会因为找不到/lib64/libc-2.15.so而无法执行

如果glibc每个版本的库文件都使用相同的名字,多个版本又无法共存

论坛徽章:
0
5 [报告]
发表于 2012-09-24 00:09 |只看该作者
回复 4# yanu

那再请教一个问题:你说:ls就会因为找不到/lib64/libc-2.15.so而无法执行,为什么一定非得/lib64/libc-2.15.so这个名称呢?这个是限制死的?


   

论坛徽章:
0
6 [报告]
发表于 2012-09-24 00:21 |只看该作者
嗯,库文件的文件名在编译的时候写死在二进制文件里面了

论坛徽章:
0
7 [报告]
发表于 2012-09-24 19:53 |只看该作者
回复 6# yanu

哦,那这样做确实有理由。



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP