注释编译
--prefix:指定你编译之后,执行make install时,生成的目录,没有使用--prefix的话,就会执行默认的目录,什么目录执行之后就知道了
CC=arm-linux-gcc
--host: 编译器类型如用arm-unknown-linux-gnueabi-gcc则填--host=arm-unknown-linux-gnueabi
--disable-debugging:禁止调试
--enable-static:静态库
--enable-shared:动态库
-I :include 所需的头文件路径
-L :lib 所需的库的路径
一 编译zlib-1.1.4
1 cd zlib-1.1.4
2 vi configure
将
24 AR=${AR-"ar rc"}
25 RANLIB=${RANLIB-"ranlib"}
63 cc=${CC-gcc}
修改为:
AR=${AR-"arm-linux-ar rc"}
RANLIB=${RANLIB-"arm-linux-ranlib"}
cc=${CC-arm-linux-gcc}
3
./configure --prefix=/opt/madplay_source/build
4 make && make install
二 编译libid3tag-0.15.1b
1 tar xvzf libid3tag-0.15.1b.tar.gz
2 cd libid3tag-0.15.1b
3 ./configure CC=arm-linux-gcc --prefix=/opt/madplay_source/build --host=arm-linux --disable-debugging --enable-static CPPFLAGS=-I/opt/madplay_source/build/include LDFLAGS=-L/opt/madplay_source/build/lib
4 make && make install
三 编译libmad-0.15.1b
1 tar -xvzf libmad-0.15.1b.tar.gz
2 cd libmad-0.15.1b
3 ./configure CC=arm-linux-gcc --prefix=/opt/madplay_source/build --host=arm-linux --disable-debugging --enable-static CPPFLAGS=-I/opt/madplay_source/build/include LDFLAGS=-L/opt/madplay_source/build/lib
或者
./configure CC=arm-linux-gcc --prefix=/opt/madplay_source/build --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/opt/madplay_source/build/include LDFLAGS=-L/opt/madplay_source/build/lib
4 make
arm-linux-gcc -DHAVE_CONFIG_H -I. -I. -I. -DFPM_ARM -DASO_INTERLEAVE1 -DASO_IMDCT -I/opt/madplay_source/build/include -Wall -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2 -fstrength-reduce -fomit-frame-pointer -MT version.lo -MD -MP -MF .deps/version.Tpo -c version.c -fPIC -DPIC -o .libs/version.o
cc1: error: unrecognized command line option "-fforce-mem"
make[2]: *** [version.lo] 错误 1
如果此时make,make install就会报错,说是"-fforce-mem"参数不能识别。不知道是什么原因,然后就在网上查了一通,好像说是我机器环境的gcc版本(我的是gcc 4.3.2)过高导致的,所以不能识别其中的"-fforce-mem"参数选项,真是搞不懂,版本高还识别不了。。。
于是乎就打开当前目录下的Makefile文件,去掉里面出现的"-fforce-mem",然后再make,make install就OK了
5
6 make install
四 编译madplay-0.15.2b
1 tar -zxvf madplay-0.15.2b.tar.gz
2 cd madplay-0.15.2b
3 ./configure CC=arm-linux-gcc --host=arm-linux --prefix=/opt/madplay_source/build --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/opt/madplay_source/build/include LDFLAGS=-L/opt/madplay_source/build/lib
4 make
5 make install
五
1 将build/bin/下的madplay 改名为my_madplay
2 优化
arm-linux-readelf -d my_madplay
Dynamic section at offset 0x24ef8 contains 28 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libid3tag.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000f (RPATH) Library rpath: [/opt/madplay_source/build/lib]
0x0000001d (RUNPATH) Library runpath: [/opt/madplay_source/build/lib]
将需要的库拷贝到开发板上
libm.so.6,libc.so.6在busybox制作根文件系统是已经生成在/lib目录下了,所以只要将/opt/software/madplay/build/lib目录下的libid3tag.so.0文件拷到/lib目录下即可
3 cp * /opt/rootfs/sound_bin/ -a
ll sound_bin/lib
总计 408
-rw-r--r-- 1 root root 84224 08-02 09:25 libid3tag.a
-rwxr-xr-x 1 root root 869 08-02 09:25 libid3tag.la
lrwxrwxrwx 1 root root 18 08-02 09:48 libid3tag.so -> libid3tag.so.0.3.0
lrwxrwxrwx 1 root root 18 08-02 09:48 libid3tag.so.0 -> libid3tag.so.0.3.0
-rwxr-xr-x 1 root root 126265 08-02 09:25 libid3tag.so.0.3.0
-rw-r--r-- 1 root root 98696 08-02 09:37 libmad.a
-rwxr-xr-x 1 root root 796 08-02 09:37 libmad.la
-rwxr-xr-x 1 root root 75600 08-01 17:56 libz.a
4 测试
加载驱动
[root@FriendlyARM /]# insmod snd-soc-wm8960.ko
[root@FriendlyARM /]# insmod snd-soc-mini210-wm8960.ko
[ 46.236633] FriendlyARM http://www.arm9.net
[ 46.349651] asoc: wm8960-hifi <-> samsung-i2s.0 mapping ok
[root@FriendlyARM /]# fa
fa-network-service fa_codec_ctrl fakeidentd false
[root@FriendlyARM /]# fa_codec_ctrl mini210
[root@FriendlyARM /]# madplay just_like_me.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Just Like Me
Artist: Jeff Hanson
Album: Son
Track: 8
Year: 2003
[ 123.413666] EPLL Rate changes from 80000000 to 67738000