移植madplay mp3 播放器到linux-2.6

1、移植 madplay 前的准备。

madplay 的移植需要以下的几个包:madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz 和 zlib-1.1.4.tar.gz 。其中前面的三个包可以在http://sourceforge.net/project/showfiles.php?group_id=12349 下载, 后一个包可以在http://www.gzip.org/zlib/zlib-1.1.4.tar.gz 中找到。

为了编译这个播放器,还需要一个交叉编译器,我用的是 arm-linux-gcc 3.4.1 版本。

建立文件夹:

[root@localhost /]# mkdir -p sep4020/madplay/lib

[root@localhost /]# cd sep4020/madplay/

将所下载的几个包考到此文件夹下然后解压:

[root@localhost madplay]# tar zxvf zlib-1.1.4.tar.tar

[root@localhost madplay]# tar zxvf libid3tag-0.15.1b.tar.gz

[root@localhost madplay]# tar zxvf libmad-0.15.1b.tar.gz

[root@localhost madplay]# tar zxvf madplay-0.15.2b.tar.gz

2、 开始编译

(1) 用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下,我把它放到了/usr/local/arm/3.4.1/arm-linux 目录下

[root@localhost madplay]# cd zlib-1.1.4

[root@localhost zlib-1.1.4]# ./configure --prefix=/sep4020/madplay/lib/

再修改(不能跟上面的步骤调转)makefile 文件:

[root@localhost zlib-1.1.4]# gedit Makefile

CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc

AR=/usr/local/arm/3.4.1/bin/arm-linux-ar rcs

RANLIB=/usr/local9/arm/3.4.1/bin/arm-linux-ranlib

[root@localhost zlib-1.1.4]# make

[root@localhost zlib-1.1.4]# make install

编译好之后就可以在上面prefix 指定的目录下的lib 目录下找到libz.a这个库。

(2)编译libid3tag

[root@localhost zlib-1.1.4]# cd ..

[root@localhost madplay]# cd libid3tag-0.15.1b

[root@localhost libid3tag-0.15.1b]# ./configure CC="/usr/local/arm/3".4.1/bin/arm-linux-gcc --prefix=/sep4020/madplay/lib --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS="-I/sep4020/madplay/lib/include" LDFLAGS="-L/sep4020/madplay/lib/lib"

其中,--disable-shared --enable-static 是指定为静态编译。不过我发现这样并不能够进行

编译。至于如何进行表态编译,我将在下面中进行介绍。

[root@localhost libid3tag-0.15.1b]# make

[root@localhost libid3tag-0.15.1b]# make install

(3) 编译libmad

[root@localhost madplay]# cd ..

[root@localhost madplay]# cd madplay-0.15.2b

[root@localhost libmad-0.15.1b]# ./configure CC="/usr/local/arm/3".4.1/bin/arm-linux-gcc --prefix=/sep4020/madplay/lib --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS="-I/sep4020/madplay/lib/include" LDFLAGS="-L/sep4020/madplay/lib/lib"

[root@localhost libmad-0.15.1b]# make

[root@localhost libmad-0.15.1b]# make install

(4) 编译madplay

[root@localhost libmad-0.15.1b]# cd ..

[root@localhost madplay]# cd madplay-0.15.2b

[root@localhost madplay-0.15.2b]# ./configure CC="/usr/local/arm/3".4.1/bin/arm-linux-gcc --prefix=/sep4020/madplay/lib --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS="-I/sep4020/madplay/lib/include/" LDFLAGS="-L/sep4020/madplay/lib/lib/"

[root@localhost madplay-0.15.2b]# make

[root@localhost madplay-0.15.2b]# make install

编译完成后,查看了一下madplay 这个可执行文件的大小,大概237K 左右,我猜想应该是用了动态编译的原因,于是把它下载到板子上试了一下,输入:

$> ./madplay

. /madplay: /lib/libc.so.6: version `GLIBC_2.3' not found (required by ./madplay)

我就更加确定上面的--disable-shared --enable-static 参数并没有让它进行静态的编译,后来又用 file madplay 试了一下,输出:

madplay: ELF 32-bit LSB executable, ARM, version 1 (ARM), for GNU/Linux 2.4.3,

dynamically linked (uses shared libs), for GNU/Linux 2.4.3, not stripped

果然是动态编译的,那么应该如何进行表静态的编译呢?我在网上找呀,都没有说具体的解决方案,只是说在 make 之后输出的最后的编译命令后加上- static,开始不太明白,还是以为只是加上--enable-static 命令,我又仔细地体会了这句话的意思,后来就按自己的想法试了一下,如下:

[root@localhost madplay-0.15.2b]# /usr/local/arm/3.4.1/bin/arm-linux-gcc -Wall -O2 -fomit-frame-pointer -o madplay madplay.o getopt.o getopt1.o version.o resample.o filter.o tag.o crc.o rgain.o player.o audio.o audio_aiff.o audio_cdda.o audio_hex.o audio_null.o audio_raw.o audio_snd.o audio_wave.o audio_oss.o -L/usr/local/arm/3.4.1/arm-linux/lib /usr/local/arm/3.4.1/arm-linux/lib/libmad.a /usr/local/arm/3.4.1/arm-linux/lib/libid3tag.a -lz -lm –static

上面这一个命令 arm-linux-gcc 的最后一个参数static 是我自己加上去的。在终端找上以上命令后,很快就编译完毕了,我又到madplay 目录下看一下madplay 文件的大小, 820多 K!!!,太好了,我知道可能是成功了,就把它下载到板子中,敲入:

$> ./madplay pig.mp3

美妙的歌曲荡漾在我的耳边!

补充:文中提到了使用静态编译,我还是使用了动态编译器,用那个200 多k 的madplay文件。同时把3.4.1 编译器中几个新生成的lib 库文件拷贝到开发板的lib 库中就可以正确运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值