id3tag-0.15.1b]$ sudo make
若没有错误便是make成功,可以继续下一步
(四)安装make install
3.编译libmad-0.15.1b
[pikaqiu@centos6 madplay]$cd libmad-0.15.1b/
(1)配置configure文件,生成Makefile
[pikaqiu@centos6 libmad-0.15.1b]$sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/pikaqiu/madplay/mad CPPFLAGS=-I/home/pikaqiu/madplay/mad/include/ LDFLAGS=-L/home/pikaqiu/madplay/mad/lib
(2)编译make
此时出现一个错误:cc1: error: unrecognized command line option “-fforce-mem”
解决方式:vim Makefile
大概在129行左右找到包含的-fforce-mem字符串,将其删除,即可。
原因:是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
(3)安装make install
4.安装madplay
[pikaqiu@centos6 madplay]$cd madplay/
(1)配置configure文件,生成Makefile
[pikaqiu@centos6 madplay]$sudo ./configure CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc --host=arm-linux --disable-shared --prefix=/home/pikaqiu/madplay/mad CPPFLAGS=-I/home/pikaqiu/madplay/mad/include/ LDFLAGS=-L/home/pikaqiu/madplay/mad/lib
我在此时又出现了一个错误:
configure: error: mad.h was not found
*** You must first install libmad before you can build this package.
*** If libmad is already installed, you may need to use the CPPFLAGS
*** environment variable to specify its installed location, e.g. -I
原因:提示说缺少头文件,即提醒我们要用-I 指令来指定头文件所在路径。
解决方法:因为我指令上面已经有存在-L与-I 来指定库与头文件目录,于是我先回到mad/include下查看,发现是真的没有mad.h这个头文件,于是我返回到顶层目录madplay采用指令查找。
[pikaqiu@centos6 madplay]$ find -name mad.h
./libmad-0.15.1b/mad.h 然后将此拷贝到/mad/include目录下后解决。
而在接下来又出现了这样的错误:
configure: error: libmad was not found
*** You must first install libmad before you can build this package.
*** If libmad is already installed, you may need to use the LDFLAGS
*** environment variable to specify its installed location, e.g. -L
原因:缺少库文件,即提醒我们要用-L来指定库文件所在路径。
解决方法:在/mad/lib/目录下我又没有找到我的libmad.a文件
[pikaqiu@centos6 madplay]$ find -name libmad.*
./mad/lib/libmad.la
./mad/lib/.libs/libmad.a
./mad/lib/libmad.a
./libmad-0.15.1b/libmad.list
./libmad-0.15.1b/msvc++/libmad.dsp
./libmad-0.15.1b/libmad.list.in
./libmad-0.15.1b/libmad.la
./libmad-0.15.1b/.libs/libmad.lai
./libmad-0.15.1b/.libs/libmad.la
./libmad-0.15.1b/.libs/libmad.a
./madplay-0.15.2b/.libs/libmad.la
./madplay-0.15.2b/.libs/libmad.a (这是我成功之后的find,但之前只有libmad-0.15.1b/.libs中有)
因为不晓得是需要.a还是.la,索性将之都拷贝到相应路径,解决之。
(2)编译make
满心欢喜的以为问题解决,以为能够make了么,这时又出现了一个问题。
....
arm-linux-gcc: /home/pikaqiu/madplay/mad/lib/.libs/libmad.a: No such file or directory
make[2]: *** [madplay] 错误 1
make[2]: Leaving directory `/home/pikaqiu/madplay/madplay-0.15.2b'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/pikaqiu/madplay/madplay-0.15.2b'
make: *** [all] 错误 2
解决办法:自己手动创建mad/lib/.libs/ 并将libmad.a文件拷贝到其目录中后解决。
至此,终于make成功生成madplay的绿色可执行程序了.又因为我使用的是静态编译。此时可不用再make install,直接将 madplay下载到开发板后给予权限即可。
chmod 777 madplay
./madplay xxx.mp3 就能够听音乐了,博主亲测!
madpaly还有一些快捷键,比如:增大/减小音量(+/-),暂停(b),停止(ESC)
没看手册,我胡乱测试了一下,发现按键盘的减号可以减小音量,shift+可以增大音量,shift-瞬间恢复满音量,s键停止。
?
?
学习小结: 1、所有的第三方应用程序移植到开发板上使用,几乎都会联系上动态库,静态库。所以需要熟悉这一方面的知识,比如如何链接动态库静态库;如何指定头文件路径以及静态链接,静态编译的参数等;
静态编译与动态编译区别:
动态编译的可执行文件需要附带一个动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其优点是缩小了执行文件本身的大小,并加快了编译速度,节省了
系统资源。但缺点也很明显,就是只要用到了库文件就需要带上相应的函数库,无论怎样都要带着一个小尾巴。这对我们移植比较小的程序的时候略微麻烦。
静态编译就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so)中的部分提取出来