嵌入式 ALSA库的编译、使用、移植
一、简述
记--编译开源音视频ALSA库、简单使用、移植ALSA库到开发板。
ALSA库源码:链接: https://pan.baidu.com/s/1mThb6vAqXCOI46z0w-A-fA 提取码: hj9r
已经编译好的:
Ubuntu (x86)下使用:链接: https://pan.baidu.com/s/12YmHBLJIrtSWA31nW0_ujA 提取码: 8gyv
开发板(arm)下使用:链接: https://pan.baidu.com/s/1dYiEQF-MC2nvU5zPJlLA1g 提取码: mz3g
测试代码:链接: https://pan.baidu.com/s/1jlwNcBvj1wD8XvhSAxTD1g 提取码: py9a
蓝奏:https://www.lanzous.com/b514084/ 密码:i7c1
二、ALSA库的编译
2.1 下载ALSA库源码:ftp://ftp.alsa-project.org/pub/lib/
2.2 解压:tar -xjvf alsa-lib-1.1.7.tar.bz2
2.3 创建一个目录:mkdir alsa
2.4 检查、配置、编译、生成库文件
a) 进入解压出来的目录:cd alsa-lib-1.1.7/
b) 检查文件,生成Makefile:./configure --prefix=/home/liang/alsa
c) 编译:make
d) 生成ALSA库:sudo make install
e) 查看生成的库文件等
2.5 使用库文件编译代码:gcc alsa_record.c -o alsa_record -L/home/liang/alsa/lib -lasound -lpthread
注:如果运行时提示找不到xxx库文件,需要将生成的lib路径下的库文件拷贝到/lib下或/usr/lib下。也可以时将生成的库添加到环境变量。
2.6 让运行的程序能够找到ALSA库
方式1:将ALSA的库文件放到 /lib 路径下
cp /home/liang/alsa/lib/libasound.so* /lib
方式2:将ALSA的库文件所在的路径添加到 链接库的环境变量(默认的库文件寻找路径)
export LD_LIBRARY_PATH=/home/liang/alsa/lib/:$LD_LIBRARY_PATH
三、移植ALSA库到开发板
说明:
1) 如果之前已经执行步骤二的命令./configure ...make...,需要将之前生成的Makefile等配置文件清除,因为之前的实在Ubuntu使用,环境时x86架构的。开发板是arm架构的,所以要清除之前的配置文件,防止冲突。
执行清除命令,进入加压的目录执行:make clean
或者是删除之前解压出来的文件,重新解压。删除之前的文件:
2) 如果没有arm交叉编译工具链的要预先进行安装。
3) 如果没有/opt/alsa目录的需要进行创建:sudo mkdir /opt/alsa
3.1 进入解压出来的目录依次执行以下三个命令:
./configure --host=arm-none-linux-gnueabi --prefix=/opt/alsa
make
make install
查看生成的库文件:
4 、 将/opt/alsa的所有文件传输到开发板相应的目录/opt/alsa。(可以打包为压缩文件再进行传输,防止连接文件异常)
注:配置什么目录就要放在相应的目录,否则程序运行时会找不到相关文件。
例子中使用nfs挂载方式直接将/opt/alsa拷贝到开发板的根目录下。
也可以先压缩再传输,压缩文件:tar -cjvf alsa_arm.tar.bz2 /opt/alsa
5、 并将opt/alsa/lib所有库文件拷贝到/lib下:cp /opt/alsa/lib/libasound*.so /lib
或者是添加到环境变量:
export LD_LIBRARY_PATH=/opt/alsa/lib:$LD_LIBRARY_PATH
6、在Ubuntu使用交叉编译工具编译程序
arm-linux-gcc alsa_record.c -o record -I /opt/alsa/include/ -L /opt/alsa/lib/ -lasound -lpthread
将可执行文件传输到开发板,添加可执行权限,执行。
注:在命令行设置环境变量,重启开发板会失效。
可以将它写入到/etc/profile文件。(开机执行文件)
export LD_LIBRARY_PATH=/opt/alsa/lib:$LD_LIBRARY_PATH