开源库soname问题

    在开发Android客户端时, 遇到Android无法加载动态库. 动态库libusb存在soname为libusb-1.0.so.0. Android客户端编译时一直提示无法找到. 

      dlopen failed: could not load library "libusb-1.0.so.0" needed by "lib****.so"; caused by library "libusb-1.0.so.0" not found.

        [from:"zhangjian5197@163.com"]

       (注: 此处暂且不讨论Android调用是否存在问题. 有可能确实是Android调用引起的.)

        通过readelf -d libusb-1.0.so, 查看信息.

        Dynamic section at offset 0x1115c contains 23 entries:
          Tag        Type                         Name/Value
         0x00000001 (NEEDED)                     Shared library: [libc.so]
         0x00000001 (NEEDED)                     Shared library: [libdl.so]
         0x0000000e (SONAME)                     Library soname: [libusb-1.0.so.0]
         0x00000010 (SYMBOLIC)                   0x0
         0x00000019 (INIT_ARRAY)                 0x19000
         0x0000001b (INIT_ARRAYSZ)               8 (bytes)

        由于动态库编译与Android开发分属不同的人, 所以首先对动态库编译进行修改.

        在开源源码中, vim libtool

         # The coded name of the library, if different from the real name.
         253 soname_spec="\${libname}\${release}\${shared_ext}\${major}"

        删除此行中的 \${major}, 再次编译. 通过readelf -d libusb-1.0.so, 查看信息.

        Dynamic section at offset 0x1115c contains 23 entries:
          Tag        Type                         Name/Value
         0x00000001 (NEEDED)                     Shared library: [libc.so]
         0x00000001 (NEEDED)                     Shared library: [libdl.so]
         0x0000000e (SONAME)                     Library soname: [libusb-1.0.so]
         0x00000010 (SYMBOLIC)                   0x0
         0x00000019 (INIT_ARRAY)                 0x19000
         0x0000001b (INIT_ARRAYSZ)               8 (bytes)

        发现soname已经修改为libusb-1.0.so, 问题在动态库处解决.

        扩展: 某些编译参数应该都可以在libtool中进行修改, 而在其他地方修改有可能无效.

                                                                                                                        

转载于:https://my.oschina.net/u/1243181/blog/686525

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值