Ubuntu使用编译alsa lib,交叉编译到arm平台

fatal error: alsa/asoundlib.h: No such file or directory解决方法

做wav播放器,想移植正点原子的alsa 应用程序,交叉编译成执行文件直接到arm板子上运行,

正点原子音乐播放例程

结果编译提示错误,查询后得知是交叉编译工具链内不包含alsa lib,因此需要移植alsa lib。

aarch64-none-linux-gnu-gcc player.c -o player -lasound
player.c:16:10: fatal error: alsa/asoundlib.h: No such file or directory
   16 | #include <alsa/asoundlib.h>
      |          ^~~~~~~~~~~~~~~~~~
compilation terminated.

1.下载alsa lib

下载地址:https://www.alsa-project.org/files/pub/lib/
下载最新版本 alsa-lib-1.2.9.tar.bz2
完成后解压,tar -xjvf alsa-lib-1.2.9.tar.bz2

2.配置configure

在解压后的alsa lib目录下,配置并指定交叉编译工具链,配置成功后生成makefile
由于我本地安装的是aarch64-none-linux-gnu,因此.configure设置如下

cd alsa-lib-1.2.9
./configure CC=aarch64-none-linux-gnu-gcc STRIP=aarch64-none-linux-gnu-strip --host=aarch64-none-linux-gnu --prefix=$PWD/install –with-configdir=$PWD/install/arm-alsa

其中host是配置交叉编译环境

prefix是配置安装后生成的lib文件位置

with-configdir是配置安装文件所在位置,尤其是指定了alsa.conf的目录

这里专门配置CC和STRIP,否则则使用strip进行动态库瘦身的时候,可能会遇到File format not recognized的错误问题
其他解释,可参考这篇博客嵌入式移植alsa lib

在这里插入图片描述

3.配置成功后,进行make

make
make install

执行成功后,在perfix指定的alsa-lib-1.2.9/install目录下,即生成了需要的include 和 lib
在这里插入图片描述

4.使用编译出的include 和lib

交叉编译时除了带-lasound参数,还需额外指定刚编译出的alsa lib路径
参数-I(指定include目录),-L(指定lib目录)

aarch64-none-linux-gnu-gcc player.c -o player -lasound -I/tools/alsa-lib/alsa-lib-1.2.9/install/include -L/tools/alsa-lib/alsa-lib-1.2.9/install/lib

编译成功,将编译出的执行文件player 放入板子验证,播放成功。

adb push player /data
adb shell /data/player /data/audio.wav
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值