移植madplay 很好用用的播放器工具

如何在PC虚拟机中制作一个mp3 player

需要准备的库文件有zlib-1.2.3.tar.gz,libid3tag-0.15.1b.tar.gz,libmad-0.15.1b.tar.gz,madplay-0.15.2b.tar.gz, alsa-lib-1.0.26
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 ubuntu中用的是alsa,madplay默认是oss,换了

上述文件我找了大半天,有些下载不能解压,有的损坏。有的下载需要分。最后在本网资源找了有免费的

在PC环境下配置和编译madplay,并使用madplay播放mp3.


1.安装zlib-1.2.3.tar.gz
解压过后,进入源码目录。
linux中.a后缀为静态库,.so文件为动态库。解压后的库文件可在/usr/lib中查看
先要对其进行配置,生成Makefile。
执行
chmod +x configure 
./configure
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就可。


====================================================

/usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)

/usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libz.a: could not read symbols: Bad value

一般是64 位 电脑才会出现。

解决方法如下:

cd zlib-1.2.3 //进入zlib目录

CFLAGS="-O3 -fPIC" ./configure   //使用64位元的方法进行编译

make


make install

make clean
 上面操作演示结果如下:

[root@unix-server1 zlib-1.2.3]# CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib/
Checking for gcc...
Building static library libz.a version 1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.
[root@unix-server1 zlib-1.2.3]# make
gcc -O3 -fPIC -DUSE_MMAP   -c -o example.o example.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o adler32.o adler32.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o compress.o compress.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o crc32.o crc32.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o gzio.o gzio.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o uncompr.o uncompr.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o deflate.o deflate.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o trees.o trees.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o zutil.o zutil.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o inflate.o inflate.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o infback.o infback.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o inftrees.o inftrees.c
gcc -O3 -fPIC -DUSE_MMAP   -c -o inffast.o inffast.c
ar rc libz.a adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
gcc -O3 -fPIC -DUSE_MMAP -o example example.o -L. libz.a
gcc -O3 -fPIC -DUSE_MMAP   -c -o minigzip.o minigzip.c
gcc -O3 -fPIC -DUSE_MMAP -o minigzip minigzip.o -L. libz.a
[root@unix-server1 zlib-1.2.3]# make install
cp zlib.h zconf.h /usr/local/zlib//include
chmod 644 /usr/local/zlib//include/zlib.h /usr/local/zlib//include/zconf.h
cp libz.a /usr/local/zlib//lib
cd /usr/local/zlib//lib; chmod 755 libz.a
cd /usr/local/zlib//lib; if test -f libz.so.1.2.3; then \
          rm -f libz.so libz.so.1; \
          ln -s libz.so.1.2.3 libz.so; \
          ln -s libz.so.1.2.3 libz.so.1; \
          (ldconfig || true)  >/dev/null 2>&1; \
        fi
cp zlib.3 /usr/local/zlib//share/man/man3
chmod 644 /usr/local/zlib//share/man/man3/zlib.3
[root@unix-server1 zlib-1.2.3]# make clean
rm -f *.o *~ example minigzip \
           libz.* foo.gz so_locations \
           _match.s maketree contrib/infback9/*.o
[root@unix-server1 zlib-1.2.3]#

猜你喜欢

转载自blog.csdn.net/ycy_dy/article/details/53400473
今日推荐