红联Linux门户
Linux帮助

Madplay移植到S3C44B0

发布时间:2008-09-21 16:00:15来源:红联作者:lrfz008
1. 准备工作。

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版本,网上很多文章都说用arm-linux-gcc 2.95.3这个交叉编译器,但是我在用它配置(./configure)libid3tag的时候,它最后老是说configure文件的某一行有错, check "config.log" for detail。没办法,只好用3.4.1版本的编译器。

2. 编译过程。

(1)编译zlib。我把库生成到交叉编译环境的库目录下,也就是把它放到了/usr/local/arm/3.4.1/arm-linux目录下。./configure --prefix=/usr/local9/arm/3.4.1/arm-linux。

再修改(不能跟上面的步骤调转)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

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

(2) 编译libid3tag

./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local/arm/3.4.1/arm-linux --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/arm/3.4.1/arm-linux/include LDFLAGS=-L/usr/local/arm/3.4.1/arm-linux/lib

其中,--disable-shared --enable-static是指定为静态编译。不过这样并不能够进行编译。至于为什么,有待于继续研究。

make, make install

(3)编译libmad

./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local9/arm/3.4.1/arm-linux --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local9/arm/3.4.1/arm-linux/include LDFLAGS=-L/usr/local9/arm/3.4.1/arm-linux/lib

然后,make ,make install

(4)编译madplay

./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local/arm/3.4.1/arm-linux --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/arm/3.4.1/arm-linux/include LDFLAGS=-L/usr/local/arm/3.4.1/arm-linux/lib

然后,make ,make install

编译完成后,查看了一下madplay这个可执行文件的大小,仅仅236.8K,太爽了吧!又想,不太可能!我猜想应该是用了动态编译的原因,于是把它下载到板子上试了一下,输入:

./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

果然是动态编译的,那怎么办呢?仔细看报错信息-----没有动态库。简单!把3.4.1编译器中几个新生成的lib库文件拷贝到开发板的lib库中。呵呵,就可以正确运行了。

3.遗留问题。

怎样才能动态编译?网上资料说在make之后输出的最后的编译命令后加上- static,不明白!这样会导致语法错误的。后来就按自己的想法试了一下,如下:

/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 only love.mp3

音质还不错。
文章评论

共有 0 条评论