一、基本信息
1、移植环境
①:ubuntu16.04
②:iMX6Q开发板
2、移植所需软件源码
①:libmad libmad 下载
②:mplayer mplayer下载
③:百度网盘下载:
链接:/s/1KM3VNY4RWhBKFsN4me8shg
提取码:rds1
二、移植Libmad
①:版本选择:libmad-0.15.1b.tar.gz
②:libmad准备工作
进入下载目录 解压 libmad-0.15.1b.tar.gz
tar xvf libmad-0.15.1b.tar.gz
解压之后进入libmad-0.15.1b
cd libmad-0.15.1b
③:配置libmad
./configure --host=arm-linux-gnueabihf --disable-debugging --enable-static --enable-shared --enable-speed --prefix=/home/avdisplay/mplayer
④:编译libmad
make
出现下面的报错
(sed -e '1s|.*|/*|' -e '1b' -e '$s|.*| */|' -e '$b' \
-e 's/^.*/ *&/' ./COPYRIGHT; echo; \
echo "# ifdef __cplusplus"; \
echo 'extern "C" {'; \
echo "# endif"; echo; \
if [ ".-DFPM_ARM" != "." ]; then \
echo ".-DFPM_ARM" | sed -e 's|^\.-D|# define |'; echo; \
fi; \
sed -ne 's/^# *define *\(HAVE_.*_ASM\).*/# define \1/p' \
config.h; echo; \
sed -ne 's/^# *define *OPT_\(SPEED\|ACCURACY\).*/# define OPT_\1/p' \
config.h; echo; \
sed -ne 's/^# *define *\(SIZEOF_.*\)/# define \1/p' \
config.h; echo; \
for header in version.h fixed.h bit.h timer.h stream.h frame.h synth.h decoder.h; do \
echo; \
sed -n -f ./mad.h.sed ./$header; \
done; echo; \
echo "# ifdef __cplusplus"; \
echo '}'; \
echo "# endif") >mad.h
make all-recursive
make[1]: Entering directory '/home/avdisplay/software/libmad-0.15.1b'
make[2]: Entering directory '/home/avdisplay/software/libmad-0.15.1b'
if /bin/bash ./libtool --mode=compile arm-linux-gnueabihf-gcc -DHAVE_CONFIG_H -I. -I. -I. -DFPM_ARM -DASO_INTERLEAVE1 -DASO_IMDCT -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 -o version.lo version.c; \
then mv -f ".deps/version.Tpo" ".deps/version.Plo"; else rm -f ".deps/version.Tpo"; exit 1; fi
mkdir .libs
arm-linux-gnueabihf-gcc -DHAVE_CONFIG_H -I. -I. -I. -DFPM_ARM -DASO_INTERLEAVE1 -DASO_IMDCT -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
arm-linux-gnueabihf-gcc: error: unrecognized command line option '-fforce-mem'
Makefile:383: recipe for target 'version.lo' failed
make[2]: *** [version.lo] Error 1
make[2]: Leaving directory '/home/avdisplay/software/libmad-0.15.1b'
Makefile:424: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/avdisplay/software/libmad-0.15.1b'
Makefile:249: recipe for target 'all' failed
make: *** [all] Error 2
arm交叉编译不支持 -fforce-mem 这个选项
解决方法:修改编译选项
vim Makefile
在129 行 删除 -fforce-mem 这个选项
修改前
CFLAGS = -Wall -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2 -fstrength-reduce -fomit-frame-pointer
修改后
CFLAGS = -Wall -O -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2 -fstrength-reduce -fomit-frame-pointer
再次执行make编译
这次没有报错了,编译成功。
⑤:安装libmad
make install
成功安装ibmad
三、移植Mplayer
①:版本选择:MPlayer-1.4.tar.xz
②:mplayer准备工作
进入下载目录 解压 MPlayer-1.4.tar.xz
tar xvf MPlayer-1.4.tar.xz
解压之后进入MPlayer-1.4
cd MPlayer-1.4
③:配置mplayer
./configure --prefix=/home/avdisplay/mplayer --cc=arm-linux-gnueabihf-gcc --disable-gui --target=arm-linux --host-cc=gcc --disable-freetype --enable-fbdev --disable-mencoder --disable-sdl --disable-live --disable-dvdread --disable-libdvdcss-internal --disable-x11 --enable-cross-compile --disable-dvdnav --disable-dvdread-internal --disable-jpeg --disable-tga --disable-pnm --disable-tv --disable-ivtv --disable-fontconfig --disable-xanim --disable-win32dll --disable-armv5te --disable-armv6 --enable-static
④:编译mplayer
make
⑤:mplayer可执行文件
这时候我们把这个编译得到的 mplayer可执行文件 拷贝到开发板就可以用了
./mplayer xxx.mp3