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
    评论
在交叉编译 PulseAudio 之前,你需要先准备好交叉编译工具链和依赖项。具体步骤如下: 1. 安装交叉编译工具链:可以根据目标平台的架构下载对应的交叉编译工具链,例如 arm-linux-gnueabihf、aarch64-linux-gnu、x86_64-w64-mingw32 等。也可以使用 crosstool-ng 工具自行构建交叉编译工具链。 2. 安装 PulseAudio 的依赖项:PulseAudio 依赖的库包括 GLib、DBus、alsa-lib、libcap 等,需要先在本地编译安装。 3. 下载 PulseAudio 源码:可以在 PulseAudio 的官方网站下载源码包,也可以使用 Git 克隆源码。 在准备好以上步骤后,可以开始进行 PulseAudio 的交叉编译: 1. 设置交叉编译环境变量:根据交叉编译工具链的名称设置环境变量,例如: ``` export CC=arm-linux-gnueabihf-gcc export CXX=arm-linux-gnueabihf-g++ export AR=arm-linux-gnueabihf-ar export AS=arm-linux-gnueabihf-as export LD=arm-linux-gnueabihf-ld export RANLIB=arm-linux-gnueabihf-ranlib export PKG_CONFIG_PATH=/path/to/cross/lib/pkgconfig ``` 2. 配置 PulseAudio:使用 configure 脚本进行配置,需要指定交叉编译工具链的路径和依赖库的路径,例如: ``` ./configure --host=arm-linux-gnueabihf \ CC=${CC} \ CXX=${CXX} \ AR=${AR} \ AS=${AS} \ LD=${LD} \ RANLIB=${RANLIB} \ PKG_CONFIG_PATH=${PKG_CONFIG_PATH} \ --disable-shared \ --enable-static \ --disable-bluez5 \ --disable-udev \ --disable-oss-output \ --disable-alsa \ --disable-lirc \ --disable-gconf \ --disable-avahi \ --disable-systemd-journal \ --disable-systemd-login \ --disable-tcpwrap \ --disable-zeroconf \ --disable-speex \ --disable-asyncns \ --disable-x11 ``` 3. 编译 PulseAudio:使用 make 命令进行编译,例如: ``` make ``` 4. 安装 PulseAudio:使用 make install 命令进行安装,例如: ``` make install ``` 完成以上步骤后,就可以在目标平台上使用交叉编译好的 PulseAudio 库了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值