Chinaunix首页 | 论坛 | 博客
  • 博客访问: 876238
  • 博文数量: 284
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1960
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 16:41
文章分类

全部博文(284)

文章存档

2018年(5)

2017年(95)

2016年(69)

2015年(15)

2014年(100)

我的朋友

分类: 嵌入式

2014-08-17 22:02:33

mini2440 madplay移植实验


参考: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]


但是,这样得到的是动态链接。如果在madplay-0.15.2b目录中执行arm-inux-gcc命令,并且在最后加上-static,运行以后就可以得到静态链接的程序,如(6)所示。
今天先这样,明天继续

先尝试一下动态链接解决办法
      运行时所需的动态库:libmad.so.0、libid3tag.so.0、libm.so.6、libc.so.6。 
     后两个文件从/usr/lib拷贝到开发板根文件系统的lib目录下 我在linux的/usr/bin没找到,开发板根文件系统lib下已经有了
    前两个文件是在/madplay/target-arm/lib/下生成的,只是快捷图标,真正的是里面的libmad.so.0.2.1.libid3tag.so.0.3.0把这两个文件也拷贝到开发板/lib下。
    将madplay复制到根文件系统/usr/bin目录下,将一个MP3文件也放在某一目录下,在开发板上执行madplay程序。 
   #madplay  XXX.mp3 
  播放OK

继续静态链接方法
天嵌培训班
静态编译 
以上是用动态编译的方法,程序运行时需依赖动态库文件。也可以采用静态编译的方法,将静态库编译到程序中,运行时不需要动态库文件。 
在配置libid3tag,libmad,madplay时,加上参数“--disable-shared  --enable-static”即可静态编译madplay,编译完成后只需将madplay复制到根文件系统/usr/bin目录下,不需要复制动态库。 #./configure  CC=arm-linux-gcc  --host=arm-linux  --disable-shared  --enable-static 
--prefix=/home/madplay CPPFLAGS=-I/home/madplay/include  LDFLAGS=-L/home/madplay/lib 



找培训班的培训目录,按具体目录项目搜代码^_^



阅读(1050) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~