linux ——libsndfile1-dev库移植至嵌入式arm

2019-07-12 23:34发布

前言

libsndfile 是一款开源的音频编解码库,可以进行一些常见的音频格式转换、音频文件拼接、单声道合成为立体声、立体声拆分为单声道等功能。本文将对libsndfile库移植至嵌入式arm进行一些介绍。
软件平台:ubuntu 16.04
移植库:libsndfile1-dev
硬件平台:zedboard开发板(arm)

获取源码

sudo apt-get source libsndfile1-dev 在这里插入图片描述
如果未安装dpkg指令,则获取的源码不会被自动解压,需要下载安装dkpg指令手动解压。 dpkg-source -x libsndfile_1.0.25-10ubuntu0.16.04.1.dsc 在这里插入图片描述
若已安装dpkg指令,下载源码的时候会自动解压到对应文件夹。

交叉编译

(1) ./configure
./configure -prefix=/home/test/tts-arm/libsndfile --host=arm-linux --target=arm CC=/opt/Xilinx/SDK/2015.4/gnu/arm/lin/bin/arm-xilinx-linux-gnueabi-gcc --disable-external-libs --enable-alsa LDFLAGS="-L/usr/local/arm-alsa/lib" CPPFLAGS="-I/usr/local/arm-alsa/include" CC是交叉编译工具的绝对路径;
–disable-external-libs是关闭一些外部库,没有这一项会报FLAC库相关的错误;
–enable-alsa是开启alsa库;
LDFLAGS和CPPFLAGS与之前als库移植的路径一致,后面移植到arm开发板上是需要使用alsa库的,alsa库的移植见:传送门
在这里插入图片描述
若直接进行编译安装,移植至开发板运行会报如下错: sndfile.c 313 assert 'sizeof (sf_count_t) == 8 ' failed! 由于我们是在arm开发板上运行,其为32位,将sndfile.c源文件313行的判断屏蔽,// assert (sizeof (sf_count_t) == 8) ;也可加入printf打印语句进行测试。 SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) { SF_PRIVATE *psf ; /* Ultimate sanity check. */ printf("sizeof (sf_count_t) =%d",sizeof (sf_count_t)); // assert (sizeof (sf_count_t) == 8) ; if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL) { sf_errno = SFE_MALLOC_FAILED ; return NULL ; } ; memset (psf, 0, sizeof (SF_PRIVATE)) ; psf_init_files (psf) ; psf_log_printf (psf, "File : %s ", path) ; copy_filename (psf, path) ; psf->file.mode = mode ; if (strcmp (path, "-") == 0) psf->error = psf_set_stdio (psf) ; else psf->error = psf_fopen (psf) ; return psf_open_file (psf, sfinfo) ; } /* sf_open */ (2)make
(3)sudo make insatall

移植测试

(1)将安装目录下的bin文件都拷贝至开发板的bin文件下; cp -ra /home/test/tts-arm/libsndfile-1.0.25/bin/* /bin/ (2)将安装目录下的lib文件都拷贝至开发板的lib文件下; cp -ra /home/test/tts-arm/libsndfile-1.0.25/lib/* /lib/ (3)指令使用和测试
arm-sndfile-info可以查看音频文件的信息。 arm-sndfile-info Front_Center.wav 在这里插入图片描述
使用arm-sndfile-play可以进行音频文件的播放。测试成功调用了alsa库实现了音频播放。
在这里插入图片描述
至此,libsndfile1-dev库已成功移植至嵌入式arm开发板。

附件(apt-get 获取源码、安装下载、更新软件包等常用命令)

sudo apt-get install package 安装软件包 sudo apt-get install package - - reinstall 重新安装软件包 sudo apt-get -f install 修复安装软件包"-f = ——fix-missing" sudo apt-get remove package 删除软件包 sudo apt-get remove package - - purge 删除软件包,包括删除配置文件等 sudo apt-get update 更新源及/etc/apt/sources.list sudo apt-get upgrade 更新已安装的软件包 sudo apt-get dist-upgrade 升级系统安装的软件包 sudo apt-get dselect-upgrade 使用 dselect 升级 sudo apt-get build-dep package 安装相关的编译环境 sudo apt-get clean && sudo apt-get autoclean 清理无用的软件包 sudo apt-get check 检查是否有损坏的依赖 apt-cache search package 搜索软件包 apt-cache show package 获取包的相关信息,如说明、大小、版本等 apt-cache depends package 了解使用依赖 apt-cache rdepends package是查看该软件包被哪些软件包依赖