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