一、环境和软件介绍

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,看看是否配置使用自己的交叉编译工具链

arm播放器iOS arm 音频播放器_linux

(3)编译并安装:

make -j4
make install

arm播放器iOS arm 音频播放器_工具链_02

 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,看看是否配置使用自己的交叉编译工具链

 

arm播放器iOS arm 音频播放器_工具链_03

(3)编译:

make -j4

出错:

arm播放器iOS arm 音频播放器_linux_04

 这是因为编译工具链的版本过高导致的,高版本的 gcc 没有 "-fforce-mem" 参数,解决的办法是在 Makefile 里面查找 "-fforce-mem" ,将其删除即可 make 通过。

(4)安装

make install

arm播放器iOS arm 音频播放器_工具链_05

 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,看看是否配置使用自己的交叉编译工具链

arm播放器iOS arm 音频播放器_工具链_06

(3)编译:

make -j4

出错:

arm播放器iOS arm 音频播放器_linux_07

但是在./configure配置时,已经指定了libmad-0.15.1b的头文件和库文件的安装目录,没搞懂为什么,然后后来想到libmad-0.15.1b的库依赖与zlib的库,所以就索性把zlib编译后得到的头文件和库文件都拷贝一份到/root/madplay_installed下的相应子文件夹中,然后再次编译,就通过了。

(4)安装

make install

arm播放器iOS arm 音频播放器_arm播放器iOS_08

我们最终需要的就是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的播放