问题描述
在mips平台上,运行程序链接ffmpeg的动态库时,程序随机的一些位置发生
Illegal instruction
错误,然后程序退出
解决方式
[root]# cat /proc/cpuinfo | grep mips
isa : mips32r1
查看CPU信息,指令集为mips32r1,对应到ffmpeg的configure选项当中时,没有对应的cpu架构与之匹配,只有
ARCH_EXT_LIST_MIPS="
mipsfpu
mips32r2
mips32r5
mips64r6
mipsdspr1
mipsdspr2
msa
"
并且有24kc/24kf/24kec...等等cpu架构可以禁用某些优化选项,例如
--disable-mips32r5 disable MIPS32R5 optimizations
--disable-mips64r6 disable MIPS64R6 optimizations
--disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations
--disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
--disable-mipsfpu disable floating point MIPS optimizations
那通过修改configure脚本,指定arch和cpu,同时disable一些优化选项,设置configure命令如下:
./configure \
--prefix=${INSTALL_DIR} \
--cross-prefix=${CROSS_PREFIX} \
--arch=mips \
--disable-mipsdsp \
--disable-mipsdspr2 \
--disable-mips32r2 \
--disable-mipsfpu \
--disable-mips64r2 \
--disable-mips32r6 \
--target-os=linux \
--enable-cross-compile \
--disable-everything \
--disable-programs \
--disable-avdevice \
--disable-filters \
--disable-runtime-cpudetect \
--disable-doc \
--disable-muxers \
--enable-muxer=mpegts \
--enable-muxer=mp4 \
--enable-muxer=wav \
--disable-demuxers \
--enable-demuxer=mov \
--disable-protocols \
--enable-protocol=file \
--disable-static \
--enable-shared \
--enable-avresample \
--enable-swscale \
--enable-encoder=aac \
--disable-zlib \
--disable-yasm \
--disable-swresample \
--disable-avfilter \
--disable-iconv \
--disable-debug
可以正常编译和运行