• 开源mp3播放器--madplay 编译和移植 简记


    madplay是一款开源的mp3播放器。

    http://madplay.sourcearchive.com/

    下面简单记录一下madplay的编译与移植到ARM开发板上的过程

    一、编译x86版本的madplay

    编译madplay需要用到三个库  zlib-1.2.8  libid3tag-0.15.1b  libmad-0.15.1b (最后面有文件下载地址)

    首先创建一个公共库文件目录

    #mkdir /_install (目录地址随意,只要和下面能够都对应起来就行)

    zlib       http://www.zlib.net/

    解压源码,进入目录

    #cd zlib-1.2.8

    #./configure --prefix=/_install  (公共库文件目录)

    #make && make install

    Libid3tag  http://cblfs.cross-lfs.org/index.php/Libid3tag(要代理才能上,如果不会代理可以用下面提供的地址下载)

    解压源码,进入目录

    #cd libid3tag-0.15.1b

    #./configure --prefix=/_install  (公共库文件目录)

    #make && make install

    libmad  http://www.linuxfromscratch.org/blfs/view/6.3/multimedia/libmad.html

    解压源码,进入目录

    #cd libmad-0.15.1b

    #./configure --prefix=/_install  (公共库文件目录)

    #make

    出现错误提示:cc1: error: unrecognized command line option "-fforce-mem"

    解决办法是修改Makefile文件

    #vi Makefile 

    将第129行中的  -fforce-mem  删除,重新make && make install 即可

    上面的工作主要是得到编译madplay所需要的库文件和头文件,编译结束后会在/_install目录下产生include lib 等目录,下面的工作要用到这两个目录

    madplay编译

    解压源码,进入目录

    #cd madplay-0.15.2b

    #mkdir _install

    #./configure --prefix=/${PWD}/_install CPPFLAGS=-I/_install/include LDFLAGS=-L/_install/lib  

    (指定编译需要的头文件目录和连接需要的库文件目录,品红色字体目录即为前面提到的公共库文件目录)

    配置成功后

    #make && make install 

    编译安装成功后进入_install 目录,

    #ls (内容如下)

    #bin man share

    进入bin目录即可看见madplay可执行文件

    #./madplay test.mp3 (即可测试mp3播放)

    二、将madplay播放器移植到arm开发板中

    先将公共库文件目录里面的东西全删除

    #cd /_install 

    #rm * -rf

    然后进入目录 zlib-1.2.8

    #cd zlib-1.2.8

    #make distclean 

    #./configure --prefix=/_install

    #vi Makefile

    将19行改为如下 CC=arm-linux-gcc   (原来是 CC=gcc)

    将30行给位如下 LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map  (原来是 LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map)

    保存退出,然后编译安装

    #make && make install

    进入 目录 libid3tag-0.15.1b

    #cd libid3tag-0.15.1b

    #make distclean

    #./configure --prefix=/_install --host=arm-linux (指定目标板)

    #make && make install

    进入目录 libmad-0.15.1b

    #cd libmad-0.15.1b

    #make distclean

    #./configure --prefix=_install/ --host=arm-linux

    #vi Makefile

    将第129行中的  -fforce-mem  删除,重新make && make install 即可

    #make && make install

    进入目录 madplay-0.15.2b

    #cd madplay-0.15.2b

    #make distclean

    #./configure --prefix=/${PWD}/_install --host=arm-linux  CPPFLAGS=-I/_install/include LDFLAGS=-L/_install/lib  

    #make && make install

    make 成功后会在当前目录下的_install目录下产生安装结果

    #cd _install

    #ls 

    bin man share

    #cd bin 

    #ls

    abxtest madplay

    可以使用file命令查看madplay文件的属性

    #file madplay 

    madplay: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.14, not stripped

    这样编译出来的二进制文件是动态连接而成的,如果下载到开发板运行,会提示很多库文件找不到。。。

    当然可以把所有的需要用到的库文件下载到开发板,但是这样可能比较麻烦,比较简单的方法是使用静态连接的方法。

    #rm madplay -f

    拷贝make的最后一个连接的命令,在最后加上-static 和 -lz,然后运行,得到静态连接的程序,如下:
    #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  -lmad -lid3tag -lm -lz -static

    连接得到的二进制文件在当前目录下

    #file madplay

    madplay: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, for GNU/Linux 2.6.14, not stripped

    可以看到madplay播放器是使用静态连接而成的。

    拷贝到开发板就不会有库文件找不到的问题了!

    所用到的文件下载传送门

    madplay_0.15.2b.orig.tar.gz  http://download.csdn.net/detail/qin1174586290/6364773

    libmad-0.15.1b.tar.gz  http://download.csdn.net/detail/qin1174586290/6364767

    libid3tag-0.15.1b.tar.gz  http://download.csdn.net/detail/qin1174586290/6364763

    zlib-1.2.8.tar.gz  http://download.csdn.net/detail/qin1174586290/6364757

     

  • 相关阅读:
    Java 将数字转为16进制,然后转为字符串类型 将空格去掉。终结版
    Java 将数字转为16进制,然后转为字符串类型
    Java 数组转字符
    Apple Reject
    NSInternalInconsistencyException
    svn报错cleanup failed–previous operation has not finished; run cleanup if it was interrupted的解决办法
    CSS伪类选择器 奇偶匹配nth-child(even)
    常用css代码(scss mixin)
    织梦网站给栏目添加自定义字段图文详解
    css怎么解决表格边框线重复问题
  • 原文地址:https://www.cnblogs.com/qinyg/p/3356299.html
Copyright © 2020-2023  润新知