$ aplay -D plug:dmix win7.wav
ALSA lib dlmisc.c:263:(snd1_dlobj_cache_get) symbol _snd_pcm_plug_open is not defined inside [builtin]
aplay: main:788: audio open error: No such device or address
$
代码追踪:
而_snd_pcm_plug_open
所在的代码文件为
查看libasound.a有没有编译pcm_plug.c
可以看到,并没有此文件的。
编译的时候不指定-with-pcm-plugins
或者添加对plug
的支持-with-pcm-plugins=plug
,这样编译出来的libasound.a中就有pcm_plug.o了。如下图所示:
可见,plug
本身是也是一个plug
,呵呵。
再次aplay也不再报第一个错误了。不过有新的错误,如下所示:
$ aplay -D plug:dmix win7.wav
ALSA lib pcm_direct.c:1722:(snd1_pcm_direct_parse_open_conf) The field ipc_gid must be a valid group (create group audio)
aplay: main:788: audio open error: Invalid argument
$
为getgrnam_r
写一个Demo,这里一个简单的DEMO获取了audio
这个group的详情。但是这个程序如果使用静态链接就会出错,这一点alsalib开发人员并没有想到。
稍作改进:
lib
make distclean ; ./gitcompile prefix=$PWD/tmp --enable-shared=no --enable-static=yes --without-libdl && make install
utils
make distclean; ./gitcompile prefix=$PWD/tmp --with-alsa-inc-prefix=/tmp/alsa-lib/tmp/include/ --with-alsa-prefix=/tmp/alsa-lib/tmp/lib CFLAGS="-static" --disable-alsamixer && aplay/aplay -D plug:dmix win7.wav
这次可以播放了。
至此解决了如果使用静态编译,dmix无法使用问题,只是一个grp引起的。