分类: 嵌入式
2014-08-17 22:02:33
参考:http://blog.chinaunix.net/uid-20752341-id-3078752.html
ftp://ftp.mars.org/pub/mpeg/下载文件
madplay-0.15.2b.tar.gz
libmad-0.15.1b.tar.gz
libid3tag-0.15.1b.tar.gz
下载
zlib-1.2.3.tar.gz
先在PC上开始
(1)建立工作目录,拷贝源代码包
在/opt/FriendlyARM/mini2440 目录下建立madplay 目录,并以此为工作目录,并在该目
录中建立以下子目录,以存放不同的文件:
#cd /opt/FriendlyARM/mini2440
#mkdir madplay
#cd madplay
#mkdir tarball src-x86 src-arm target-x86 target-arm
目录说明:
tarball 目录用来存放所有的源代码包
src-x86 目录用来存放X86 版本的所有源代码文件
src-arm 目录用来存放ARM 版本的所有源代码文件
target-x86 目录是X86 版本的安装目录
target-arm 目录是ARM 版本的安装目录
(2)接下来把从网上下载到的源代码包放入 tarball 目录:
解压源代码包
#cd tarball
#for f in $(ls *.tar.gz); do tar xvzf $f -C ../src-x86 ; done 同时解压多个文件
(3)编译madplay 所依赖的库文件
a) libid3tag
#cd ../src-x86/libid3tag-0.15.1b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86
#make
#make install
b) libmad
#cd ../ libmad-0.15.1b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86
#make
cc1: error: unrecognized command line option “-fforce-mem”
解决方式是:找到libmad 文件夹Makefile中的-fforce-mem找到 删除 -fforce-mem
原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误!
#make install
以上过程完毕,将在 target-x86 目录出现编译madplay 所依赖的库文件lib和头文件include。
(4)编译安装madplay
如果我们还是像刚才那样配置编译选项:
#cd madplay-0.15.2b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x86/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-x86/lib (-I/opt -L/opt 之间都不可以有空格)
执行结果如下:
configure: creating ./config.status
config.status: creating Makefile
config.status: creating msvc++/Makefile
config.status: creating intl/Makefile
config.status: creating po/Makefile.in
config.status: creating m4/Makefile
config.status: creating madplay.list
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: creating po/POTFILES
config.status: creating po/Makefile
这说明配置已经成功,生成了编译所需要的 Makefile 文件,输入一下命令开始编译安装
#make
#make install
执行完毕, 可执行文件将被安装在我们指定的目录
/opt/FriendlyARM/QQ2440/madplay/target-x86 目录中:
#ls target-x86/bin
abxtest madplay
其中abxtest 是附加生成的测试程序
(5)测试PC 版的madplay
拷贝一首mp3 文件到madplay 所在的目录../target-x86/bin 执行:
#./madplay test.mp3
如果你的声卡已经正确安装,就可以听到mp3 的声音了。
运行OK
通过以上步骤,我们看到配置和编译不仅有一定的顺序,还需要注意一些安装细节,
(6)构建编译脚本build-x86
虽然这次编译通过了,但不免以后会忘记这个过程,特别是当程序更加复杂的时候,因此我们要养成好习惯,把整个过程构建为一个脚本,以后只要执行这个脚本就可以完成所有步骤了
如下所示是PC 版本madplay 的构建脚本,该脚本位于madplay 工作目录的根目录:
#!/bin/sh
#This build script is for madplay under PC-Linux
MADPLAY_DIR=/opt/FriendlyARM/QQ2440/madplay
SRC_DIR=src-x86
TARGET_DIR=$MADPLAY_DIR/target-x86
tar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIR
cd $SRC_DIR/libid3tag-0.15.1b
./configure --prefix=$TARGET_DIR
make;make install
cd ../../
cd $SRC_DIR/libmad-0.15.1b
./configure --prefix=$TARGET_DIR
make;make install
cd ../..
cd $SRC_DIR/madplay-0.15.2b
./configure --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
下面开始交叉编译:
ARM-Linux(ARM——mini2440版本)
1、解压源代码包
# cd tarball
# for f in $(ls *.tar.gz); do tar -zxvf $f –C ../src-arm; done
或者:
# cd tarball
# tar -zxvf zlib-1.2.3.tar.gz -C ../src-arm
# tar -zxvf libid3tag-0.15.1b.tar.gz -C ../src-arm
# tar -zxvf libmad-0.15.1b.tar.gz -C ../src-arm
# tar -zxvf madplay-0.15.2b.tar.gz -C ../src-arm
2、编译madplay及其所依赖的库文件
(1)设定编译器环境变量
# export CC=arm-linux-gcc
(2)编译zlib,因为libid3tag依赖于这个库文件?
# cd ../src-arm/zlib-1.2.3
# ./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-arm
# make
# make install
或者:
打开/opt/FriendlyARM/mini2440/madplay/src-arm/zlib-1.2.3
目录下的Makefile文件,按以下内容修改并保存:
CC=arm-linux-gcc
AR=arm-linux-ar rcs
RANLIB=arm-linux-ranlib
prefix=/opt/FriendlyARM/mini2440/madplay/target-arm
然后make,make install,编译好之后就可以在上面prefix指定目录下的lib目录下找到libz.a这个库。
(3)编译libid3tag
# cd ../libid3tag-0.15.1b
# ./configure --host=arm-linux --prefix=/opt/FriendlyARM/mini2440/madplay/target-arm --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-arm/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-arm/lib
# make
# make install
(4)编译libmad
# cd ../libmad-0.15.1b
# ./configure --host=arm-linux --prefix=/opt/FriendlyARM/mini2440/madplay/target-arm --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-arm/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-arm/lib
# make
出现相同-fforce-mem,在Makefile中找到,删除
# make install
(5)编译madplay
# cd ../madplay-0.15.2b
# ./configure --host=arm-linux --prefix=/opt/FriendlyARM/mini2440/madplay/target-arm --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-arm/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-arm/lib
# make
在madplay-0.15.2b目录下生成madplay的可执行文件 madplay
到这就结束了,可以不用install
# make install
在madplay-0.15.2b目录下生成../src-arm/madplay-0.15.2b(怎么在这里?)的可执行文件,查看一下需要的动态库
#arm-linux-readelf -d madplay
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libmad.so.0]
0x00000001 (NEEDED) Shared library: [libid3tag.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]