嵌入式平臺Portaudio的交叉編譯

該博文屬於系列文章,其他文章參考總覽: kaldi嵌入式平臺的移植及實現

 

前言:

PortAudio是一個免費的、跨平臺的、開放源碼的音頻I/O庫,kaldi在online gmm針對流式解碼時,使用了該開源框架,像DNN解碼,kaldi暫時未提供流解碼,使用的還是wav解碼,詳細見src/online2bin/下的一些解碼器程序,針對一些特定場景,需要移植流解碼,就有可能還需用到portaudio的框架。

portaudio源碼下載:

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

 

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步。

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時,注意與開發板的版本一致

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章