一、環境和軟件介紹
1、主機環境:Ubuntu16.04
2、交叉編譯器: gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67)
3、ARM板:kernel:2.6.35,SoC:S5PV210
4、軟件包: zlib-1.2.3 、 libid3tag-0.15.1b.tar.gz 、 libmad-0.15.1b.tar.gz 、 madplay-0.15.2b.tar.gz,后三個獲取鏈接:https://sourceforge.net/projects/mad/files/
二、移植以上幾個庫
1、交叉編譯zlib-1.2.3
這個不細說,原因:我自己以前移植過了,在系統里存有編譯好的zlib庫文件,這百度也可以找到移植的方法
2、交叉編譯libid3tag-0.15.1b.tar.gz(這個編譯要依賴zlib的庫)
(1)解壓:
tar -xvf libid3tag-0.15.1b.tar.gz
(2)配置:
cd libid3tag-0.15.1b/
./configure --host=arm-linux CC=arm-linux-gcc --enable-static --disable-shared --disable-debugging --prefix=/root/madplay_installed CPPFLAGS=-I/root/dir_lib/include LDFLAGS=-L/root/dir_lib/lib
注意:
CC=arm-linux-gcc這選項是指定編譯工具鏈。但是這前提是我已經為我的工具鏈創建了arm-linux-xxx這樣的符號鏈接,並且將路徑導出到了PATH
--prefix=/root/madplay_installed這個指定的是我自定義的libid3tag-0.15.1b的安裝目錄
CPPFLAGS=-I/root/dir_lib/include LDFLAGS=-L/root/dir_lib/lib,這是我這里特例,這是我指定的我之前編譯好了的zlib的頭文件和庫的路徑。
在./configure配置完了后,一定要看打印出來的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉編譯工具鏈
(3)編譯並安裝:
make -j4
make install
3、交叉編譯 libmad-0.15.1b.tar.gz
(1)解壓:
tar -xvf libmad-0.15.1b.tar.gz
(2)配置:
cd libmad-0.15.1b/
./configure --host=arm-linux --enable-static --disable-shared -disable-debugging --prefix=/root/madplay_installed
注意:
--host=arm-linux這選項是指定編譯工具鏈。但是這前提是我已經為我的工具鏈創建了arm-linux-xxx這樣的符號鏈接,並且將路徑導出到了PATH
--prefix=/root/madplay_installed這個指定的是我自定義的 libmad-0.15.1b的安裝目錄
在./configure配置完了后,一定要看打印出來的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉編譯工具鏈
(3)編譯:
make -j4
出錯:
這是因為編譯工具鏈的版本過高導致的,高版本的 gcc 沒有 "-fforce-mem" 參數,解決的辦法是在 Makefile 里面查找 "-fforce-mem" ,將其刪除即可 make 通過。
(4)安裝
make install
4、交叉編譯madplay-0.15.2b.tar.gz
(1)解壓:
tar -xvf madplay-0.15.2b.tar.gz
(2)配置:
cd ~/madplay-0.15.2b/
./configure CC=arm-linux-gcc --host=arm-linux --enable-static --disable-shared --disable-debugging --prefix=/root/madplay_installed CPPFLAGS=-I/root/madplay_installed/include LDFLAGS=-L/root/madplay_installed/lib
注意:
CC=arm-linux-gcc:這選項是指定編譯工具鏈。但是這前提是我已經為我的工具鏈創建了arm-linux-xxx這樣的符號鏈接,並且將路徑導出到了PATH
--prefix=/root/madplay_installed:這個指定的是我自定義的madplay-0.15.2b的安裝目錄
CPPFLAGS=-I/root/madplay_installed/include:指定libmad-0.15.1b的頭文件安裝目錄
LDFLAGS=-L/root/madplay_installed/lib:指定libmad-0.15.1b的庫文件安裝目錄
在./configure配置完了后,一定要看打印出來的信息,或者查看配置生成的Makefile,看看是否配置使用自己的交叉編譯工具鏈
(3)編譯:
make -j4
出錯:
但是在./configure配置時,已經指定了libmad-0.15.1b的頭文件和庫文件的安裝目錄,沒搞懂為什么,然后后來想到libmad-0.15.1b的庫依賴與zlib的庫,所以就索性把zlib編譯后得到的頭文件和庫文件都拷貝一份到/root/madplay_installed下的相應子文件夾中,然后再次編譯,就通過了。
(4)安裝
make install
我們最終需要的就是madplay這個可執行程序,把它移植到ARM板,可以通過./madplay xxx(xxx為mp3格式的音樂)來測試。
在一個程序中使用madplay,包括播放,暫停播放,恢復播放,停止播放
//&:代表后台運行
system("madplay north.mp3 &");//利用system函數調用madplay播放器播放*.mp3音樂 system("madplay north.mp3 -r &");//循環播放:參數-r system("killall -9 madplay");//利用system函數調用killall命令將madplay終止掉 system("killall -STOP madplay &");//利用system函數調用killall命令將madplay暫停 system("killall -CONT madplay &");//利用system函數調用killall命令恢復madplay的播放