打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mp3播放器madplay 移植过程详解

1、环境

linux操作系统:fedora 10;

交叉编译器: arm-linux-gcc-4.3.3

目前madplay的官方网站是http://www.underbit.com/products/mad/,透过该网
站的介绍可以得知, 它还需要libmad 和libid3tag 两个库, 从该网站找到下载
连接http://sourceforge.net/project/showfiles.php?group_id=12349
这样我们就得到了移植 madplay  所需要的关键的三个文件:
madplay-0.15.2b.tar.gz
libmad-0.15.1b.tar.gz
libid3tag-0.15.1b.tar.gz

2、手动编译

#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  版本的安装目录

接下来把从网上下载到的源代码包放入 tarball  目录:

解压源代码包
#cd tarball
#for f in $(ls *.tar.gz); do tar xvzf $f –C ../src-x86; done

编译madplay  所依赖的库文件
a) libid3tag
#cd ../src-x86/libid3tag-0.15.1b
#./configure --prefix=/opt/GTStudio/GT2440/madplay/target-x86
#make
#make install
 
b) libmad
#cd ../libmad-0.15.1b
#./configure --prefix=/opt/GTStudio/GT2440/madplay/target-x86
#make
#make install
以上过程完毕,将在 target-x86  目录出现编译madplay所依赖的库文件和头
文件。

编译安装madplay
 如果我们还是像刚才那样配置编译选项:
 #cd madplay-0.15.2b
 #./configure --prefix=/opt/GTStudio/GT2440/madplay/target-x86

提示我们在配置 madplay 之前要先安装libmad,因为我们之前已经编译并安
装了依赖库,根据提示我们要设置CPPFLAGS  环境变量,采用如下参数重新配
置:
  #./configure--prefix=/opt/GTStudio/GT2440/madplay/target-x86
CPPFLAGS=-I//opt/GTStudio/GT2440/madplay/target-x86/include

提示告诉我们还要设置 LDFLAGS 环境变量,因此再次修改配置参数如下:
 #./configure--prefix=/opt/GTStudio/GT2440/madplay/target-x86
CPPFLAGS=-I/opt/GTStudio/GT2440/madplay/target-x86/include
LDFLAGS=-L/opt/GTStudio/GT2440/madplay/target-x86/lib

这说明配置已经成功,生成了编译所需要的 Makefile 文件,输入一下命令
开始编译安装:
 #make
 #make install
 执行完毕, 可执行文件将被安装在我们指定的目录
/opt/GTStudio/GT2440/madplay/target-x86 目录中:
 #ls target-x86/bin
 abxtest madplay
其中abxtest  是附加生成的测试程序,不必理会。

测试PC 版的madplay
 拷贝一首mp3 文件到madplay 所在的目录,执行:
 #./madplay test.mp3
如果你的声卡已经正确安装,就可以听到mp3 的声音了。

3、构建编译脚本build-x86

[root@HeBi madplay]# cat build-x86
#!/bin/sh

MADPLAY_DIR=$PWD
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/includeLDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
[root@HeBi madplay]#

在安装过程中会出现错误:

cc1: error: unrecognized command line option "-fforce-mem"
make[2]: *** [version.lo] 错误 1
make[2]: Leaving directory`/opt/GTStudio/GT2440/madplay/src-x86/libmad-0.15.1b'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory`/opt/GTStudio/GT2440/madplay/src-x86/libmad-0.15.1b'
make: *** [all] 错误 2
make  install-recursive

 

configure: error: mad.h was not found
*** You must first install libmad before you can build thispackage.
*** If libmad is already installed, you may need to use theCPPFLAGS
*** environment variable to specify its installed location, e.g.-I

.
make: *** 没有指明目标并且找不到 makefile。 停止。
make: *** 没有规则可以创建目标“install”。 停止。
[root@HeBi madplay]#

解决办法:

[root@HeBi madplay]# ls
build-arm  build-x86 src-arm  src-x86 tarball  target-arm target-x86
[root@HeBi madplay]# cd src-x86/
[root@HeBi src-x86]# ls
libid3tag-0.15.1b libmad-0.15.1b  madplay-0.15.2b
[root@HeBi src-x86]# cd libmad-0.15.1b/
[root@HeBi libmad-0.15.1b]# ls
aclocal.m4    config.sub   depcomp       imdct_s.dat    libtool     mkinstalldirs  synth.c
bit.c         configure    fixed.c       INSTALL        ltmain.sh   msvc++        synth.h
bit.h         configure.ac fixed.h       install-sh     mad.h       qc_table.dat   timer.c
CHANGES       COPYING      frame.c       layer12.c      mad.h.sed   README        timer.h
config.guess  COPYRIGHT    frame.h       layer12.h      Makefile    rq_table.dat   TODO
config.h      CREDITS      global.h      layer3.c       Makefile.am sf_table.dat   VERSION
config.h.in   D.dat        huffman.c     layer3.h       Makefile.in stamp-h1      version.c
config.log    decoder.c    huffman.h     libmad.list    minimad.c   stream.c      version.h
config.status decoder.h    imdct_l_arm.S  libmad.list.in missing     stream.h      version.loT
[root@HeBi libmad-0.15.1b]# vi configure


/-fforce-mem

 

case "$optimize" in
       -O|"-O "*)
           optimize="-O"
           optimize="$optimize-fforce-mem"   //删掉-fforce-mem

//高版本编译器已经去除这项;

//所以编译不通过;
           optimize="$optimize -fforce-addr"

 

[root@HeBi madplay]# ls
build-arm  build-x86 src-arm  src-x86 tarball  target-arm target-x86
[root@HeBi madplay]# vi build-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  //注释这三行

 

[root@HeBi madplay]# ./build-x86

//重新编译;

[root@HeBi madplay]# cd target-x86/
[root@HeBi target-x86]# ls
bin  include lib  man  share
[root@HeBi target-x86]# cd bin/
[root@HeBi bin]# ls
abxtest  madplay
[root@HeBi bin]# ./madplay/home/zhanghanzhong/CHINESE_HEART.MP3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 RobertLeslie et al.
         Title: ?μ?й
        Artist: ???
       Comment: ?V±|μ

//在PC机上播放音乐

4、构建编译脚本build-x86

同样的方法编译madplay;arm下需要zlib-1.2.3

[root@HeBi madplay]# cd src-arm/
[root@HeBi src-arm]# ls
libid3tag-0.15.1b libmad-0.15.1b  madplay-0.15.2b zlib-1.2.3
[root@HeBi src-arm]#

开发板下尝试MP3:

[root@ hebi /]# mount -t nfs -o nolock192.168.1.103:/opt /mnt  //挂载NFS文件系统
[root@ hebi/]# cd /mnt/
[root@ hebi/mnt]# ls
GTStudio   TX44b0     lost+found
[root@zhanghanzhong /mnt]#

[root@ GT2440]# cd madplay/
[root@ madplay]# ls
build-arm  src-arm    tarball    target-x86
build-x86  src-x86    target-arm
[root@ hebi madplay]# cd target-arm/
[root@ hebi  target-arm]# ls
bin     include lib     man     share
[root@ target-arm]# cd bin/
[root@ hebi bin]# ls
abxtest  madplay
[root@ hebi bin]# ./madplay /root/Documents/chinese_heart.mp3
./madplay: error while loading shared libraries: libid3tag.so.0:cannot open shared object file: No such file or directory
[root@ hebi bin]#

//从文件系统root_qtopia_2.2.0.tar.gz;

//找到libid3tag.so.0,并放到/lib目录下:
[root@hebi GTStudio]# ls
GT2440         libid3tag.so.0
[root@ hebi GTStudio]# cp libid3tag.so.0 /lib/
[root@hebi  GTStudio]# madplay
Usage: madplay [OPTIONS] FILE [...]
Try `madplay --help' for more information.
[root@hebi  GTStudio]# madplay/root/Documents/chinese_heart.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 RobertLeslie et al.
         Title: ?òμ??D1úD?
        Artist: ???÷??
       Comment:ò?à?±|μ?        //从终端复制过来,显示为乱码;

 查看需要的动态库:

[root@HeBi madplay]# cd target-arm/
[root@HeBi target-arm]# ls
bin  include lib  man  share
[root@HeBi target-arm]# cd bin/
[root@HeBi bin]# ls
abxtest  madplay
[root@HeBibin]# arm-linux-readelf -d madplay

方法二:

linux 查看可执行文件依赖的动态链接库

[root@HeBi lib]# arm-linux-objdump -x libm.so.6 | grepNEEDED
 NEEDED              ld-linux.so.2
 NEEDED              libc.so.6
[root@HeBi lib]#

 

 

Dynamic section at offset 0x1400c contains 29 entries:
 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: [libgcc_s.so.1]
 0x00000001(NEEDED)                    Shared library:[libc.so.6]
 0x0000000f(RPATH)                     Library rpath: [/opt/GTStudio/GT2440/madplay/target-arm/lib]
 0x0000000c(INIT)                      0x9830
 0x0000000d(FINI)                      0x19208
 0x00000019(INIT_ARRAY)                0x24000
 0x0000001b(INIT_ARRAYSZ)              4 (bytes)
 0x0000001a(FINI_ARRAY)                0x24004
 0x0000001c(FINI_ARRAYSZ)              4 (bytes)
 0x00000004(HASH)                      0x8168
 0x00000005(STRTAB)                    0x8d30
 0x00000006(SYMTAB)                    0x8500
 0x0000000a(STRSZ)                     1527 (bytes)
 0x0000000b(SYMENT)                    16 (bytes)
 0x00000015(DEBUG)                     0x0
 0x00000003(PLTGOT)                    0x2411c
 0x00000002(PLTRELSZ)                  832 (bytes)
 0x00000014(PLTREL)                    REL
 0x00000017(JMPREL)                    0x94f0
 0x00000011(REL)                       0x9490
 0x00000012(RELSZ)                     96 (bytes)
 0x00000013(RELENT)                    8 (bytes)
 0x6ffffffe(VERNEED)                   0x9430
 0x6fffffff(VERNEEDNUM)                3
 0x6ffffff0(VERSYM)                    0x9328
 0x00000000(NULL)                      0x0
[root@HeBi bin]#

 

 

静态编译:

 加上:--disable-shared --enable-static

 即可把需要的库编译;而不需要动态库;

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【转】Madplay移植
Ubuntu8.10下移植madplay到mini2440
madplayer 移植
一些开源项目在ARM上的移植
用Direct Sound为MP3解码器libmad播放输出
mini2440 madplay移植出现问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服