Chinaunix首页 | 论坛 | 博客
  • 博客访问: 86971
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 184
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-07 12:40
个人简介

自古人生于世,需有一技之能;我辈既务斯业,便当专心用功;以后名扬四海,根据即在年轻(霸王别姬)

文章分类

全部博文(27)

文章存档

2014年(6)

2013年(21)

我的朋友

分类: C/C++

2013-12-28 21:47:33

-Wl 表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正 在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。

这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同

libxxxx.so.major.minor

其中,xxxx是库的名字,major是主版本号,minor 是次版本号

简单的来说,soname指定了库的名字,而不去管生成的是什么名字的库,在做连接是将这个soname指定的名字加入执行文件中,而程序运行是也是去加载soname指定的库文件名。所以如果程序连接了新升级的库,只需要将这个新库拷贝到目录下面后,对其以soname做一个符号链接就能调用。

如果库升级了,但是程序依旧使用旧的链接库,那么只需对这个将旧库名字软链接到新升级的库中去即可。

阅读(2379) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~