链接详解--共享库命名

按照共享库的命名惯例,每个共享库有三个文件名:real name,soname和linker name。

 

soname是一个符号链接的名字,只包含共享库的主版本号,主版本号一致即可保证库函数的接口一致,

因此应用程序的.dynamic段只记录共享库的soname,只要soname一致,这个共享库就可以用。

使用共享库可以很方便地升级库文件而不需要重新编译应用程序,这是静态库没有的优点。

注:libc的版本号有一点特殊,libc-2.8.90.so的主版本号是6而不是2或2.8。

 

linker name仅在编译链接时使用,gcc的-L选项应该制定linker name所在的目录。

有的linker name是库文件的一个符号链接,有的是一段链接脚本(libc.so)。

 

示例:

real name:/lib/i386-linux-gun/libc-2.15.so

softname: /lib/i386-linux-gun/libc.so.6

linker name: /usr/lib/i386-linux-gun/libc.so

 

gcc -shared -Wl,soname,libstack.so.1 -o libstack.so.1.0 stack.o push.o pop.o is_empty.o

这样编译生成的库文件是libstack.so.1.0,是real name,soname是libstack.so.1。

需要首先创建linker name:

ln -s libstack.so.1.0 libstack.so

程序编译需要linker name,程序执行需要soname,最终指向real name。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值