本文转载自http://blog.sina.com.cn/s/blog_8f9cdbbd010178y7.html,并根据自己的理解进行了更改与补充。
madplay版本:
madplay-0.15.2
交叉编译器版本:
arm-linux-gcc 4.3.3
操作系统平台:
Linux -- Fedora10
开发板平台:
Arm -- TQ2440
准备源码包: 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
建立两个文件夹,一个存放源码,一个存放安装文件
在home下,mkdir两个文件夹:madplay-src madplay
依次解压四个源码包到madplay-src目录下: tar xzvf XXXXXXXXX
本文默认已在/etc/profile中指定了 arm-linux-gcc 4.3.3安装目录。
一.动态编译
1. 编译 zlib-1.1.4
首先配置configure 文件(注:等号两边不能有空格)
#./configure --prefix=/home/madplay
命令解释:
把zlib-1.1.4编译安装到/home/madplay目录下,该目录可根据自己需要更改。会在/home/madplay目录下产生/include 和/lib目录
修改Makefile
CC=arm-linux-gcc
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
#make
#make install
2. 编译libid3tag
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay CPPFLAGS=-I /home/madplay/include LDFLAGS=-L /home/madplay/lib
命令解释:
CC=arm-linux-gcc:指定C编译器为arm-linux-gcc
--host=arm-linux:指定运行平台
--prefix=/home/madplay:指定编译安装到/home/madplay
CPPFLAGS=-I /home/madplay/include:指定.h头文件目录
LDFLAGS=-L /home/madplay/lib:指定编译所用到的库文件目录
#make
#make install
3. 编译libmad
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay CPPFLAGS=-I /home/madplay/include LDFLAGS=-L /home/madplay/lib
#make
这里会出现一个错误:cc1: error: unrecognized command line option "-fforce -mem"
我们修改Makefile文件,大约在129行将-fforce -mem删掉。
#make
#make install
4. 编译madplay
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay CPPFLAGS=-I /home/madplay/include LDFLAGS=-L /home/madplay/lib
#make
到这就结束了,可以不用make install
在madplay-0.15.2b目录下生成madplay的可执行文件,查看一下需要的动态库
#arm-linux-readelf -d madplay
输出运行时所需的动态库:libmad.so.0, libid3tag.so.0, libm.so.6,libc.so.6, libgcc_s.so.1(都是真实库文件,不是库的链接文件)
前两个文件是在/madplay/lib/下生成的,把这两个文件也拷贝到根文件系统的/lib目录下。
我把这些库都加到/lib中还是不能用,有错误--/bin/sh:madplay :not found.后来又加了一个ld-linux.so.3就好用了。这些库文件可以在这里下载:madplay_lib.tar.gz
将madplay复制到根文件系统/usr/bin目录下,将一个MP3文件也放在某一目录下(如,/mp3/song 目录下的125.mp3文件),在开发板上执行madplay程序
#madplay /mp3/song/125.mp3
就能听音乐了!
madplay还有一些快捷键,比如:增大/减小音量(+/-),暂停(b),停止(ESC),其
他的操作可以查看madplay的源码。
二.静态编译
在配置 libid3tag,libmad,madplay 时,加上参数“--disable-shared --enable-static”即可静态编译madplay (配置zlib-1.1.4与上面相同)
1. 编译 zlib-1.1.4
首先配置configure 文件
#./configure --prefix=/home/madplay
修改Makefile
CC=arm-linux-gcc
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib
#make
#make install
2. 编译libid3tag
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay --disable-shared --enable-static CPPFLAGS=-I /home/madplay/include LDFLAGS=-L /home/madplay/lib
命令解释:
--disable-shared:禁止库共享,可理解为禁止库动态链接
--enable-static:使能库静态链接
#make
#make install
3. 编译libmad
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay --disable-shared --enable-static CPPFLAGS=-I /home/madplay/include LDFLAGS=-L /home/madplay/lib
#make
这里会出现一个错误:cc1: error: unrecognized command line option "-fforce -mem"
我们修改Makefile文件,大约在129行将-fforce -mem删掉。
#make
#make install
4. 编译madplay
#./configure CC=arm-linux-gcc --host=arm-linux --prefix=/home/madplay --disable-shared --enable-static CPPFLAGS=-I/home/madplay/include LDFLAGS=-L/home/madplay/lib
#make
到这就结束了,可以不用make install
在madplay-0.15.2b目录下生成madplay的可执行文件,查看一下需要的动态库
#arm-linux-readelf -d madplay
发现还需要三个动态库:libm.so.6,libc.so.6, libgcc_s.so.1
我们用刚刚编译madplay时的最后一句命令:
#arm-linux-gcc -Wall -g -O2 -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/home/madplay/lib/ /home/madplay//lib/libmad.a /home/madplay//lib/libid3tag.a -lz -lm
后面加上 -static即可将这三个库静态编译到madplay中。
执行此命令后,再次查看动态库:
#arm-linux-readelf -d madplay
会出现there is no dynamic section in this file
说明成功了!
编译完成后只需将madplay复制到根文件系统/usr/bin目录下,不需要复制动态
库。