pulseaudio新建立模块的编译

关于编写模块的文档,http://www.pulseaudio.org/wiki/WritingModules ,有关于编译模块的说明,下面这样

gcc -g -shared -o module-<yourmodule>.so module-<yourmodule>.c

但是这样很明显是不行的。

第一:有些库文件是没有办法找到的,必须在后面增加选项

-lpulse -lpulsecommon-0.9.21 -lpulsecore-0.9.21

第二:有些头文件也是没有办法找到的,还要增加选项

-I ./pulseaudio-0.9.21/src 等等

第三:这个是最麻烦的,./configure自动生成的Makefile中定义这一些宏定义,也需要加入。

 

第一种方法:独立编译

1. 这里我们需要将pulseaudio的pulsecore目录的头文件cp到系统头文件目录:/usr/include/pulsecore/

2. 直接使用gcc

gcc -g -shared -o module-<yourmodule>.so module-<yourmodule>.c -lpulse -lpulsecommon-0.9.21 -lpulsecore-0.9.21

如果使用了协议扩展的话还需要 -lprotocol-native.

需要注意的是,在pulseaudio编译安装的时候,libprotocol-native.so被安装到/usr/lib/pulse-0.9.21/modules/这个目录,所以必须要在加载我们模块的时候指定这个目录,方法有三:

a> 修改系统默认的搜索路径

b> 修改系统环境变量:LD_LIBRARY_PATH

c> 编译的时候指定rpath,例如

gcc --share -g -o module-audio.so -I../ -DHAVE_ATOMIC_BUILTINS -DHAVE_CONFIG_H *.c -lpulse -lpulsecore-0.9.21 -L/usr/lib/pulse-0.9.21/modules -lprotocol-native -Wl,-rpath -Wl,/usr/lib/pulse-0.9.21/modules/ -fPIC -DPIC

3. 可以替代#2, 使用automake

这个和#2有类似之处,这里省略了autoconf的一些过程,下面是Makefile.am

pulsecore = -lpulsecore-@PA_MAJORMINORMICRO@
pulsecommon = -lpulsecommon-@PA_MAJORMINORMICRO@
pulse = -lpulse
AM_LIBADD = $(DBUS_LIBS) $(GLIB20_LIBS) $(pulse) $(pulsecommon) $(pulsecore) -L/usr/lib/pulse-0.9.21/modules/
AM_CFLAGS = $(LIBPULSE_CFLAGS) $(DBUS_CFLAGS) $(GLIB20_CFLAGS) -I/usr/lib/include/pulse -I/usr/lib/include/ -I/usr/include
MODULE_LDFLAGS = -module -avoid-version
CFLAGS+=-Wl,-rpath -Wl,$(modlibexecdir)

#configdir   = /etc/pulse
#config_DATA = policy.conf
#EXTRA_DIST  = $(config_DATA)

#genarate SYMDEF files
SYMDEF_FILES = module-audiomanager-symdef.h

EXTRA_DIST = $(SYMDEF_FILES)
BUILT_SOURCES = $(SYMDEF_FILES)

$(SYMDEF_FILES): module-defs.h.m4
            $(MKDIR_P) $(dir $@)
                $(M4) -Dfname="$@" $< > $@

modlibexec_LTLIBRARIES = module-audiomanager.la

# AudioManager
module_audiomanager_la_SOURCES = module-audiomanager.c /
                                 audio-streams.c /
                                 audio-devices.c /
                                 audio-userchooser.c /
                                 audio-route.c /
                                 audio-conflict.c /
                                 audio-volume.c /
                                 audio-voicecall.c /
                                 audio-sinksource.c/
                                 audio-protocolext.c
module_audiomanager_la_LDFLAGS = $(MODULE_LDFLAGS)
module_audiomanager_la_LIBADD = $(AM_LIBADD) $(GLIB20_LIBS) $(DBUS_LIBS) -lprotocol-native
#module_audiomanager_la_CFLAGS = $(AM_CFLAGS)

 

 

第二种方法:和pa统一编译

借助automake。比如我增加了一个sink,叫做:module-myalsa-sink, 相关的文件有 module-myalsa-sink.c 和 module-myalas-sink-symdef.h.

1. 修改 pulseaudio-0.9.21/src/Makefile.am

> 增加下面内容到适当位置,可以参考module-pipe-sink相关文件的位置

modlibexec_LTLIBRARIES += /
                module-myalsa-sink.la

# These are generated by an M4 script
SYMDEF_FILES = /
...
modules/module-myalsa-sink-symdef.h /
...

module_myalsa_sink_la_SOURCES = modules/module-myalsa-sink.c
module_myalsa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
module_myalsa_sink_la_LIBADD = $(AM_LIBADD) libpulsecore-@PA_MAJORMINORMICRO@.la libpulsecommon-@PA_MAJORMINORMICRO@.la libpulse.la

2. 回到pulseaudio代码目录 pulseaudio-0.9.21

automake

这样就生成了Makefile.in文件

3. 在执行一般的编译过程, configure, make ,make install

这样就可以编译出我们需要的模块: module-myalsa-sink

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值