module-audiomanager无法加载的问题

在编写好一个模块的雏形后,和pa一起编译没有什么问题,但是独立编译后的模块(.so),总是无法加载成功, ltdl_open失败。

 

我在解决这个问题的时候,大部分精力消耗在各个问题孤立的分析与孤立的尝试过程中。这样就不可避免的认为自己一部分正确的工作是错误的。

后来发现有些函数我用了,但是在库里面是local。这也会导致ltdl_open打开失败。

1. libpulse的local限制

代码里面使用了pa_operation_done, pa_operation_new.

看看map-file会发现,pa_operation_new,  pa_operation_done没有被定义为global.

定义重新编译后可以。

这也是我比较迷惑的问题,既然这两个函数是local的,外部不能直接用, 居然编译不出错。

2. 动态库的search path引起的问题。

可以看到pulseaudio内建模块和我们独立编译模块的区别。

当然,如果我们不想或者不能设置rpath了,我们可以设置LD_LIBRARY_PATH来解决这个search path的问题。

这个默认的path里面包含了/usr/lib, 这就是为什么我修改Makefile.am使得libprotocol-native安装到/usr/lib可以解决问题的原因。

最初的module-audiomanager和pulseaudio系统内建的 module-stream-restore的区别在rpath上

[sbox-alp-x86-rel-prod: ~/dev/ALP/main/open-source/pulseaudio-0.9.21/dist] > readelf -d /usr/lib/pulse-0.9.21/modules/module-stream-restore.so

Dynamic section at offset 0x63fc contains 33 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libprotocol-native.so]
 0x00000001 (NEEDED)                     Shared library: [libpulsecore-0.9.21.so]
 0x00000001 (NEEDED)                     Shared library: [libltdl.so.7]
 0x00000001 (NEEDED)                     Shared library: [libspeexdsp.so.1]
 0x00000001 (NEEDED)                     Shared library: [libpulse.so.0]
 0x00000001 (NEEDED)                     Shared library: [libpulsecommon-0.9.21.so]
 0x00000001 (NEEDED)                     Shared library: [libsndfile.so.1]
 0x00000001 (NEEDED)                     Shared library: [librt.so.1]
 0x00000001 (NEEDED)                     Shared library: [libdl.so.2]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000e (SONAME)                     Library soname: [module-stream-restore.so]
 0x0000000f (RPATH)                      Library rpath: [/usr/lib/pulse-0.9.21/modules]
 0x0000000c (INIT)                       0x1798
 0x0000000d (FINI)                       0x5704
 0x00000004 (HASH)                       0xb4
 0x00000005 (STRTAB)                     0xa38
 0x00000006 (SYMTAB)                     0x3d8
 0x0000000a (STRSZ)                      2313 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000003 (PLTGOT)                     0x7538
 0x00000002 (PLTRELSZ)                   696 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x14e0
 0x00000011 (REL)                        0x1480
 0x00000012 (RELSZ)                      96 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x1410
 0x6fffffff (VERNEEDNUM)                 3
 0x6ffffff0 (VERSYM)                     0x1342
 0x6ffffffa (RELCOUNT)                   7
 0x00000000 (NULL)                       0x0
[sbox-alp-x86-rel-prod: ~/dev/ALP/main/open-source/pulseaudio-0.9.21/dist] > readelf -d /usr/lib/pulse-0.9.21/modules/module-audiomanager.so  

Dynamic section at offset 0x83c4 contains 27 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [libpulse.so.0]
 0x00000001 (NEEDED)                     Shared library: [libpulsecommon-0.9.21.so]
 0x00000001 (NEEDED)                     Shared library: [libpulsecore-0.9.21.so]
 0x00000001 (NEEDED)                     Shared library: [libprotocol-native.so]
 0x00000001 (NEEDED)                     Shared library: [libglib-2.0.so.0]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
 0x0000000e (SONAME)                     Library soname: [module-audiomanager.so]
 0x0000000c (INIT)                       0x1604
 0x0000000d (FINI)                       0x6de4
 0x00000004 (HASH)                       0xb4
 0x00000005 (STRTAB)                     0x9e8
 0x00000006 (SYMTAB)                     0x3c8
 0x0000000a (STRSZ)                      2061 (bytes)
 0x0000000b (SYMENT)                     16 (bytes)
 0x00000003 (PLTGOT)                     0x9504
 0x00000002 (PLTRELSZ)                   504 (bytes)
 0x00000014 (PLTREL)                     REL
 0x00000017 (JMPREL)                     0x140c
 0x00000011 (REL)                        0x132c
 0x00000012 (RELSZ)                      224 (bytes)
 0x00000013 (RELENT)                     8 (bytes)
 0x6ffffffe (VERNEED)                    0x12bc
 0x6fffffff (VERNEEDNUM)                 3
 0x6ffffff0 (VERSYM)                     0x11f6
 0x6ffffffa (RELCOUNT)                   10
 0x00000000 (NULL)                       0x0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值