接了个任务,做一个嵌入式系统openwrt下的播放器,要求能联网用安卓端进行简单的控制,之前对这块完全不了解,所以第一步是了解一下madplay。

环境是vm12,ubuntu16.0.4,x64,虚拟机名为Ubuntu x64-16

转载地址

为了安装方便写了脚本整合了需要的资源,传送门

补充说明:脚本中的INSTALL定义有误,csdn规定上传资源无法修改,这里做说明

正确定义应为

INSTALL="./configure\n

make\n

make install"

PC端安装使用

需要准备的文件有
zlib-1.2.3.tar.tar用于文件的压缩和解压
libid3tag-0.15.1b.tar.gz mp3的解码库
libmad-0.15.1b.tar.gz madplay的库文件
madplay-0.15.2b.tar.gz 播放程序的压缩包,mp3播放器的源码
alsa-lib-1.0.26.tar.bz2 ubuntu中用的是alsa,madplay默认是oss,换了
ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。但是开发者需要安装这个开发库,编译很简单,./configure && make即可,编译的时候添加上-laso
                            und编译指令就好了。    
【tar.bz2用jxvf,tar.gz用zxvf】
在PC环境下配置和编译madplay,并使用madplay播放mp3.

1.安装zlib-1.2.3.tar.gz
解压过后,进入源码目录。
linux中.a后缀为静态库,.so文件为动态库。解压后的库文件可在/usr/lib中查看
先要对其进行配置,生成Makefile。
执行
chmod +x configure 【获取权限】
./configure 【CFLAGS="-O3 -fPIC" ./configure,对于64位电脑】
make
make生成libz.a库
再把生成的库安装到系统中
make install。
在/usr/local/lib中。
后续的安装与此相同。
2.安装libid3tag-0.15.1b
3.安装libmad-0.15.1b
安装的时候出现一个错误。
cc1: error: unrecognized command line option “-fforce-mem”
解决方式是:找到libmad configure之后的Makefile
找到包含"-fforce-mem"字符串,将其删除,就可以了。
原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
4,安装alsa-lib-1.0.26
5.安装madplay-0.15.2b
./configure --with-alsa (添加后缀)
6.执行madplay
./madplay filename.mp3
又出现错误
./madplay: error while loading shared libraries: libmad.so.0: cannot open shared object file: No such file or directory
版本不同,刚编译的库文件放对位置。
ln -s  /usr/local/lib/libmad.so.0  /usr/lib/libmad.so.0
ln -s  /usr/local/lib/libid3tag.so.0  /usr/lib/libid3tag.so.0
添加环境变量 
在 /etc/environment 的PATH 添加 /usr/lib/
下次登录即生效
然后执行上述播放命令就可以了。

交叉编译

交叉编译时与上述过程相同,但是在配置的时候要做些修改。
建立新文件夹/home/ban/madplay/source 用来存放编译后的库与执行文件
1.安装zlib
用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下
./configure --prefix=/home/ban/madplay/source   
修改Makefile.
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar rc
RANLIB=arm-linux-gnueabihf-ranlib
make 
make install
安装完成后,在/home/ban/madplay/source/ 中将生产lib跟include2个文件夹
2.编译libid3tag
./configure --host=arm-linux-gnueabihf --enable-static --disable-shared --disable-debugging --prefix=/home/ban/madplay/source CPPFLAGS=-I/home/ban/madplay/source/include LDFLAGS=-L/home/ban/madplay/source/lib
make 
make install
明:--host指明库运行的环境arm-linux-gnueabihf;--prefix,CPPFLAGS,LDFLAGS指定库文件路径
-disable-shared 编译器默认是动态连接共享库的。这里指明为静态连接(关键)。

3.编译libmad
./configure --host=arm-linux-gnueabihf --enable-static --disable-shared --disable-debugging --prefix=/home/ban/madplay/source CPPFLAGS=-I/home/ban/madplay/source/include LDFLAGS=-L/home/ban/madplay/source/lib
make
make install 

4.编译madplay
./configure --host=arm-linux CC=arm-linux-gcc --disable-debugging --disable-shared 
make 
make install
完成以后把生成的可执行文件madplay下载到开发板中
执行./madplay filename.mp3就可。



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐