嵌入式平台Portaudio的交叉编译

该博文属于系列文章,其他文章参考总览: kaldi嵌入式平台的移植及实现

 

前言:

PortAudio是一个免费的、跨平台的、开放源码的音频I/O库,kaldi在online gmm针对流式解码时,使用了该开源框架,像DNN解码,kaldi暂时未提供流解码,使用的还是wav解码,详细见src/online2bin/下的一些解码器程序,针对一些特定场景,需要移植流解码,就有可能还需用到portaudio的框架。

portaudio源码下载:

官网地址: http://www.portaudio.com/download.html

 

嵌入式平台Portaudio的交叉编译_第1张图片

portaudio编译:

1. 解压刚刚下载的源码文件 pa_stable_v190600_20161030.tgz, tar -zxvf pa_stable_v190600_20161030.tgz

2. 进入源码目录, cd portaudio/

3. 执行 CC=mips-linux-gnu-gcc  ./configure --enable-static --host=mips-linux-gnu ,如果出现下面的界面,说明alsa配置没有生效,如果ALSA.........yes,跳过第4步,直接第5步。

嵌入式平台Portaudio的交叉编译_第2张图片

4.  如果ALSA........no,则做以下操作,打开Makefile文件,修改以下代码,由于格式,放置于代码块中,可以用比对工具拷贝后比较。

CFLAGS = -g -O2 -DPA_LITTLE_ENDIAN -I$(top_srcdir)/include -I$(top_srcdir)/src/common -I$(top_srcdir)/src/os/unix -pthread -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_SYS_SOUNDCARD_H=1 -DHAVE_LINUX_SOUNDCARD_H=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=8 -DHAVE_CLOCK_GETTIME=1 -DHAVE_NANOSLEEP=1 -DPA_USE_ALSA=1 -DPA_USE_OSS=1

OTHER_OBJS =  src/hostapi/alsa/pa_linux_alsa.o src/hostapi/oss/pa_unix_oss.o src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o src/common/pa_ringbuffer.o
INCLUDES = portaudio.h pa_linux_alsa.h

for include in $(INCLUDES); do \
    $(INSTALL_DATA) -m 644 $(top_srcdir)/include/$$include $(DESTDIR)$(includedir)/$$include; \
done
$(INSTALL_DATA) -m 644 $(top_srcdir)/src/common/pa_ringbuffer.h $(DESTDIR)$(includedir)/$$include;
$(INSTALL_DATA) -m 644 $(top_srcdir)/src/common/pa_memorybarrier.h $(DESTDIR)$(includedir)/$$include;
$(INSTALL) -d $(DESTDIR)$(libdir)/pkgconfig

5. 打开Makefile,修改以下参数

    CXX = mips-linux-gnu-g++

    AR = mips-linux-gnu-ar

6. 由于portaudio编译需要alsa的lib库,alsa lib的mips交叉编译请参考 Mips平台kaldi源码的交叉编译一alsa的交叉编译 ,有了mips平台的alsa的lib后,修改Makefile文件:

CFLAGS = -g -O2 -DPA_LITTLE_ENDIAN -I$(top_srcdir)/include -I$(top_srcdir)/src/common -I$(top_srcdir)/src/os/unix -pthread -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_SYS_SOUNDCARD_H=1 -DHAVE_LINUX_SOUNDCARD_H=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=8 -DHAVE_CLOCK_GETTIME=1 -DHAVE_NANOSLEEP=1 -DPA_USE_ALSA=1 -DPA_USE_OSS=1 -I /home/xxx/alsa-lib-1.1.7/install/include

LDFLAGS = -L/home/xxx/alsa-lib-1.1.7/install/lib/

LIBS = -lm -lpthread /home/xxx/alsa-lib-1.1.7/install/lib/libasound.so

7. make  没有报错, 执行 make install PREFIX=`pwd`/install, 就会在portaudio目录下看到编译生成的lib库

 

编译错误:

No rule to make target ' src/hostapi/alsa/pa_linux_alsa.lo' 代表alsa的交叉编译有问题,或路径有问题,建议检查alsa的库,在交叉编译alsa lib时,注意与开发板的版本一致

你可能感兴趣的:(Linux,语音识别)