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. Heap(data structure)——堆(数据结构)(源自维基百科)

    源地址:http://en.wikipedia.org/wiki/Heap_%28data_structure%29 在计算机科学领域,堆是指一个特定的基于数结构的数据结构,其必须满足堆属性: 如果A ...

  2. SonicUI在MFC中的使用

    SonicUI是一个GUI引擎,提供了一些简单的UI组件实现高效率的UI效果,例如:自绘按钮.异形窗体.动画.超链接和图像操作方法.此项目作者开源到CodeProject,地址为:http://www ...

  3. Hadoop: the definitive guide 第三版 拾遗 第十三章 之HBase起步

    指南上这一章的开篇即提出:HBase是一个分布式的.面向列的开源数据库.如果需要实时的随机读/写超大规模数据集,HBase无疑是一个好的选择. 简介 HBase 是一个高可靠性.高性能.面向列.可伸缩 ...

  4. Matlab,Visio等生成的图片的字体嵌入问题解决方法

    确保所有字体嵌入,是生成高质量学术论文的必要条件.但是在Windows下,总会遇到Matlab或Visio生成字体没有嵌入的问题,当然这个问题的解决办法有很多(例如,对于Visio可以这样做:直接拷贝 ...

  5. IMAP和POP3有什么差别?

    servCode=6010376">POP3协议同意电子邮件client下载server上的邮件,可是在client的操作(如移动邮件.标记已读等),不会反馈到server上.比方通过 ...

  6. sqlserver bak还原

    一.查看: restore filelistonly from disk='F:\Db\A_backup.bak' 二.还原:RESTORE DATABASE AFROM DISK = 'F:\Db\ ...

  7. (08)DBA写给开发的索引经验

          索引可是个大事情,翻开任意一本数据库调优的书,索引都会占到比较大的篇幅.这是个人人都很重视的问题,可往往起始阶段还好,但数据库到最后常常还是会陷入由索引起的性能怪圈中.特别是在上线运行过一 ...

  8. [Unity3D]Unity3D游戏开发之《愤慨的小鸟》弹弓实现

    各位朋友,大家晚上好, 我是秦元培.欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.今天我们来做一个高端大气上档次的东西. 我相信大家都玩过一款叫做<愤慨的 ...

  9. AssertValid函数学�

    转自http://tsitao.blog.163.com/blog/static/29795822006914105840496/ VC的调试中,AssertValid和Dump函数的应用 CObje ...

  10. Cocos2d-x学习笔记(5)

    Cocos2d-x基本元素介绍: 1.CCDirector:大总管 这是控制游戏流程的主要组件,包含设定游戏呈现窗体.FPS显示.默认帧率上限.纹理颜色位宽等切换当前游戏场景.暂停或恢复场景执行.通过 ...