移植madplay音乐播放器到ARM板
一、环境和软件介绍
1、主机环境:Ubuntu16.04
2、交叉编译器: gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)
3、ARM板:kernel:2.6.35,SoC:S5PV210
4、软件包: zlib-1.2.3 、 libid3tag-0.15.1b.tar.gz 、 libmad-0.15.1b.tar.gz 、 madplay-0.15.2b.tar.gz,后三个获取链接:https://sourceforge.net/projects/mad/files/
二、移植以上几个库
1、交叉编译zlib-1.2.3
这个不细说,原因:我自己以前移植过了,在系统里存有编译好的zlib库文件,这百度也可以找到移植的方法
2、交叉编译libid3tag-0.15.1b.tar.gz(这个编译要依赖zlib的库)
(1)解压:
tar -xvf libid3tag-0.15.1b.tar.gz
(2)配置:
cd libid3tag-0.15.1b/
./configure --host=arm-linux CC=arm-linux-gcc --enable-static --disable-shared --disable-debugging --prefix=/root/madplay_installed CPPFLAGS=-I/root/dir_lib/include LDFLAGS=-L/root/dir_lib/lib
注意:
CC=arm-linux-gcc这选项是指定编译工具链。但是这前提是我已经为我的工具链创建了arm-linux-xxx这样的符号链接,并且将路径导出到了PATH
--prefix=/root/madplay_installed这个指定的是我自定义的libid3tag-0.15.1b的安装目录
CPPFLAGS=-I/root/dir_lib/include LDFLAGS=-L/root/dir_lib/lib,这是我这里特例,这是我指定的我之前编译好了的zlib的头文件和库的路径。
在./configure配置完了后,一定要看打印出来的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉编译工具链
(3)编译并安装:
make -j4
make install
3、交叉编译 libmad-0.15.1b.tar.gz
(1)解压:
tar -xvf libmad-0.15.1b.tar.gz
(2)配置:
cd libmad-0.15.1b/
./configure --host=arm-linux --enable-static --disable-shared -disable-debugging --prefix=/root/madplay_installed
注意:
--host=arm-linux这选项是指定编译工具链。但是这前提是我已经为我的工具链创建了arm-linux-xxx这样的符号链接,并且将路径导出到了PATH
--prefix=/root/madplay_installed这个指定的是我自定义的 libmad-0.15.1b的安装目录
在./configure配置完了后,一定要看打印出来的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉编译工具链
(3)编译:
make -j4
出错:
这是因为编译工具链的版本过高导致的,高版本的 gcc 没有 "-fforce-mem" 参数,解决的办法是在 Makefile 里面查找 "-fforce-mem" ,将其删除即可 make 通过。
(4)安装
make install
4、交叉编译madplay-0.15.2b.tar.gz
(1)解压:
tar -xvf madplay-0.15.2b.tar.gz
(2)配置:
cd ~/madplay-0.15.2b/
./configure CC=arm-linux-gcc --host=arm-linux --enable-static --disable-shared --disable-debugging --prefix=/root/madplay_installed CPPFLAGS=-I/root/madplay_installed/include LDFLAGS=-L/root/madplay_installed/lib
注意:
CC=arm-linux-gcc:这选项是指定编译工具链。但是这前提是我已经为我的工具链创建了arm-linux-xxx这样的符号链接,并且将路径导出到了PATH
--prefix=/root/madplay_installed:这个指定的是我自定义的madplay-0.15.2b的安装目录
CPPFLAGS=-I/root/madplay_installed/include:指定libmad-0.15.1b的头文件安装目录
LDFLAGS=-L/root/madplay_installed/lib:指定libmad-0.15.1b的库文件安装目录
在./configure配置完了后,一定要看打印出来的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉编译工具链
(3)编译:
make -j4
出错:
但是在./configure配置时,已经指定了libmad-0.15.1b的头文件和库文件的安装目录,没搞懂为什么,然后后来想到libmad-0.15.1b的库依赖与zlib的库,所以就索性把zlib编译后得到的头文件和库文件都拷贝一份到/root/madplay_installed下的相应子文件夹中,然后再次编译,就通过了。
(4)安装
make install
我们最终需要的就是madplay这个可执行程序,把它移植到ARM板,可以通过./madplay xxx(xxx为mp3格式的音乐)来测试。
在一个程序中使用madplay,包括播放,暂停播放,恢复播放,停止播放
//&:代表后台运行
system("madplay north.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐 system("madplay north.mp3 -r &");//循环播放:参数-r system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉 system("killall -STOP madplay &");//利用system函数调用killall命令将madplay暂停 system("killall -CONT madplay &");//利用system函数调用killall命令恢复madplay的播放