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

开源mp3播放器--madplay 编译和移植 简记的更多相关文章

  1. 嵌入式mp3播放器

    分四部分:按键驱动,声卡驱动,Madplay播放器移植,MP3主播放器处理 按键1:播放,按键2:停止,按键3:上一曲,按键4:下一曲 UA1341内核自带声卡驱动 .解压内核: tar zxvf l ...

  2. C# wave mp3 播放器探寻

    C# wave mp3 播放器探寻   最近无聊,想听听歌曲.可怜新电脑上歌曲就两三首,要听其它的就得在旧电脑上播放.可是,那台古董但不失健壮的本本被老婆无情的霸占了.无奈. 思来想去,得,写个程序播 ...

  3. x宝23大洋包邮的老式大朝华MP3播放器简单评测

    (纯兴趣测评,非广告) 最近逛X宝,看到了这个古董级MP3播放器居然还在售,于是脑抽+情怀泛滥买了一个. 然后呢,从遥远的深圳跨越好几千公里邮过来了这个玩意: 那节南孚5号电池是我自己的,是为了对比一 ...

  4. 基于GStreamer编写Mp3播放器

    一.简介 作者系统为CentOS6,本文在此基础上对Mp3播放器进行开发,需要使用mp3解码库libmad和gstreamer0.10-plugins-ugly,详细步骤如下.   二.操作步骤 1) ...

  5. Arava: 写一个控制台风格的Mp3播放器

    Mp3播放器 来写一个控制台版的mp3播放器.以前很喜欢 cmd.fm 这种控制台风格的播放器. 播放mp3使用 mp3spi 库:下载mp3spi库文件,解压,拿出根目录下的 mp3spi1.9.5 ...

  6. MP3播放器团队项目

    一.设计思路 程序要求能播放MP3文件,因此需调用库中的播放方法:右键工具箱选择项,添加com组件,选择window media player后工具箱就会多一个控件,然后拖到窗体中就OK了.另在窗体中 ...

  7. 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

    I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...

  8. 你用java的swing可以做出这么炫的mp3播放器吗?

    这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 j ...

  9. MP3播放器的实现

    今天,基本上实现了MP3播放器的基本功能,现在总结一下. 首先,下载服务器端的MP3列表,这里用到了下载技术和解析XML文件技术. 下载参考(http://blog.csdn.net/huim_lin ...

随机推荐

  1. Eclipse用法和技巧十九:eclipse修改workspace

    工作中某一个项目的文件一般都在某一个路径,大多数人都习惯固定eclipse的workspace.不过偶尔也有点别的,比如做一个大项目中穿插着做些OJ,或者别的……这个时候当然可以选择在安装一个ecli ...

  2. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

    hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加 ...

  3. 基于visual Studio2013解决面试题之0905子串数量

     题目

  4. 真机測试时的错误:No matching provisioning profiles found

    1.出现错误的原因是这种---- 公司接收一个外包项目,原来做真机測试的时候,用的是公司申请的苹果开发人员账号.如今项目结束了,准备上线,但客户要求使用客户自己的苹果开发人员是账号上线,于是就用客户的 ...

  5. 一个问题:关于类型转换Type Cast(汇编讲解 as 语法)

    问题如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34   ...

  6. 基于visual Studio2013解决C语言竞赛题之1087数字变换

        题目 解决代码及点评 /************************************************************************/ /* ...

  7. 正则表达式概述与JAVA中正则表达式的应用

    编程或者电脑使用过程中,经常需要对字符串进行 匹配,查找,替换,判断.如果单纯用代码 if () ,whlie 什么的进行比较复杂麻烦.正则表达式是一种强大灵活的文本处理工具,专门对字符串进行匹配,查 ...

  8. Get Cordova Ready for Grunt and CoffeeScript

    Cordova, Grunt and Coffee You may reference to below if you deside to work with coffee instead of Ja ...

  9. Servlet的学习之Response响应对象(1)

    在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...

  10. android图片压缩的3种方法实例

    android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...