cc1: error: unrecognized command line option"-fforce-mem" |
http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc2.tar.bz2
./configure --prefix=$PWD/../output/arm_linux--cc=arm-linux-gcc --target=arm-armv4-linux --host-cc=gcc |
- MPlayer不支持常见的--host来修改编译工具前缀.必须用--cc,--ar,--ranlib这样参数来修改.而且交叉编译--enable-cross-compile
是必须的. - --disable-gui
关闭图形界面,只采用字符界面控制 - --disable-mp3lib是关闭默认的MP3解码库,--enable-mad 是使用libmad支持.
- --disable-dvbhead --disable-dvdread--disable-dvdnav
--disable-dvdread-internal 都是跟DVD相关库,基本版可以不用安装. - --disable-x11 --enable-fbdev
关闭X11视频输出,打开framebuffer支持.ARM开发板必须的. - --enable-static如果使用静态编译尺寸大约是8M,动态编译是6M多,这样可能是无论哪种编译方式,mplayer都把自带的解码库链接到自身,多出2M应该是系统标准库的尺寸。
2.编译:
- 在某一些编译器下,会提示找不到intptr_t定义,如果是这样
libavcodec/bitstream.h:181行 ,加入如下语句.
|
否则会产生如下编译错误,intptr_t在标准C中有定义,但在这里死活找不到,因此直接定义:
arm-linux-gcc -I../libswscale -I../libavcodec In file included from mpegvideo.h:32, bitstream.h: In function ''put_bits'': bitstream.h:233: error: ''intptr_t'' undeclared (first usein this function) bitstream.h:233: error: (Each undeclared identifier is reportedonly once bitstream.h:233: error: for each function it appears in.) bitstream.h:233: error: expected '')'' before ''s'' bitstream.h: In function ''init_get_bits'': bitstream.h:777: error: ''intptr_t'' undeclared (first use in thisfunction) bitstream.h:777: error: expected '')'' before ''buffer'' bitstream.h:778: error: expected '')'' before ''buffer'' make[1]: *** [cyuv.o] Error 1 |
- 去掉ARM pld指令的支持
在其开始的加入,这段代码意思是定义一个空的ARM汇编宏 pld,这样当代码出现pld指令,就变成一条空指令
|
pld指令只在armv5te以上版本有效,在2440(armv4l)无效.必须取消掉,这个指令的格式是
预读取PLD指令 功能:cache预读取(PLD,PreLoad),使用PLD指示存储系统从后面几条指令所指定的存储器地址读取,存储系统可使用这种方法加速以后的存储器访问。 格式: |
如果不取消,将会产生如下错误
arm-linux-gcc -I../libswscale -I../libavcodec cc1: warning: include location "/usr/X11R6/include" is unsafe forcross-compilat armv4l/dsputil_arm_s.S: Assembler messages: armv4l/dsputil_arm_s.S:79: Error: selected processor doesnot support `pld [r1]'' armv4l/dsputil_arm_s.S:90: Error: selected processor does notsupport `pld [r1]'' armv4l/dsputil_arm_s.S:100: Error: selected processor does notsupport `pld[r1] armv4l/dsputil_arm_s.S:111: Error: selected processor does notsupport `pld[r1] armv4l/dsputil_arm_s.S:122: Error: selected processor does notsupport `pld[r1] armv4l/dsputil_arm_s.S:141: Error: selected processor does notsupport `pld [r1] |
修改make install的bug
执行make install时会提示
install -m 755 -s mplayer/home/hxy/MPlayer/ MPlayer-1.0rc2/../output/arm_linux/bin strip: Unable to recognise the format of the inputfile `/home/hxy/MPlayer/MPlayer-1.0rc2/../output/arm_linux/bin/mplayer' |
查资料看install带-s参数时会自动调用strip来strip应用程序。但是arm编译时要调用arm-linux-strip才有正确处理。解决办法是取消-s参数,查看Makefile可以发现-s是如下
$(INSTALL) -m 755 $(INSTALLSTRIP)mplayer$(EXESUF)
的INSTALLSTRIP设置的,它默认是-s,因此只要简单在Makefile的前面(95行)加入
INSTALLSTRIP :=
4.执行:
这是我的成功执行一段脚本:
export APP_ROOT=/mnt/nfs/MPlayer/output/arm_linuxexport LD_LIBRARY_PATH=$APP_ROOT,OOT/lib;./mplayer -ac mad 2.mpg |
测试mpg,avi,mp3,mp4均可播放,默认是按视频的原始分辨率播放的。如果想让MPlayer完整在LCD上显示,可以用videofilter 参数 scale来设置
./mplayer -vfscale=240:320
另外有人测试发现在有一些开发板下.Mplayer播放后,输出会干扰后续shell的执行行.用下面比较长的参数一般没事
export APP_ROOT=/mnt/nfs/MPlayer/output/arm_linuxexport LD_LIBRARY_PATH=$APP_ROOT,OOT/lib;./mplayer -ac mad 2.mpg -quiet \ -vf scale=320:240 2>&1 1>/dev/null && |
如果搞不清自己分辩率的,可在MPlayer用-fullscreen参数 .或者执行busybox shell命令fbset查看自n己板的分辩率