so库创建,使用和依赖关系

我对so库的name的理解:

libtest.so libtest.so.1 libtest.so.1.1

libtest.so 用在gcc的编译选项-ltest,在生成程序时会去寻找libtest.so

libtest.so.1 用在soname entris,版本兼容性控制,ldd app看到的就是这一个

libtest.so.1.1 so库的全名,包含major version and minor version


记录so库之间的依赖关系:

gcc:gcc (Ubuntu 4.9.1-16ubuntu6) 4.9.1

linux:3.16.0-23-generic #31-Ubuntu SMP Tue Oct 21 18:00:35 UTC 2014 i686 i686 i686 GNU/Linux

描述: town引用libfamily.so, libfamily.so引用libman.so, libwoman.so, libman.so依赖libdog.so, libwoman.so依赖libcat.so

问题:

1、makefile只执行了第一个target,其他未执行

恍然间想起make默认只执行第一个target,解决方法第一个target为

all: one two tree

或者

.PHONY: one two three

2、几个so文件编译ok,但是编译town使用,未引用family()?

readelf -d,查看dynamic section,发现几个so没有引用关系,在未使用-soname时,也不会有soname entries,经过加上soname,问题依旧。

gcc -L. -lfamily -o town town.c 改为 gcc -o town town.c -L. -lfamily,发现ok,根据此把makefile修改后,make sucess!

结果:

readelf -d town

Dynamic section at offset 0xf0c contains 25 entries:
  标记        类型                         名称/值
 0x00000001 (NEEDED)                     共享库:[libfamily.so]
 0x00000001 (NEEDED)                     共享库:[libc.so.6]


readelf -d libfamily.so

Dynamic section at offset 0xef4 contains 27 entries:
  标记        类型                         名称/值
 0x00000001 (NEEDED)                     共享库:[libman.so]
 0x00000001 (NEEDED)                     共享库:[libwoman.so]
 0x00000001 (NEEDED)                     共享库:[libc.so.6]
 0x0000000e (SONAME)                     Library soname: [libfamily.so]

ldd town #查看app依赖的全部so库

    linux-gate.so.1 =>  (0xb7789000)
    libfamily.so => ./libfamily.so (0xb7783000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75c1000)
    libman.so => ./libman.so (0xb75bd000)
    libwoman.so => ./libwoman.so (0xb75ba000)
    /lib/ld-linux.so.2 (0xb778c000)
    libdog.so => ./libdog.so (0xb75b7000)
    libcat.so => ./libcat.so (0xb75b4000)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值