移植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]#

發佈了29 篇原創文章 · 獲贊 19 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章