Mac编译FFmpeg4.0.2单独so库(验证可用)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010164190/article/details/81949288

ffmpeg下载

1、修改ffmpeg-4.0.2源码下configure文件
将该文件中的如下四行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换为:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

2、编写build_android.sh脚本
#!/bin/bash

NDK=/Users/xxx/android-sdks/ndk-bundle
ISYSROOT=$NDK/sysroot

#修改点:1
PLATFORM=/Users/xxx/android-sdks/ndk-bundle/platforms/android-21/arch-arm

#修改点:2
TOOLCHAIN=/Users/xxx/android-sdks/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

#修改点:3
PREFIX=/Users/xxx/Downloads/ffmpeg/ffmpeg_so_file

function build_one
{
./configure \
--prefix=$PREFIX \
--target-os=linux \
--enable-cross-compile \
--disable-doc \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=$PLATFORM \
--extra-cflags="-I$ISYSROOT/usr/include -isystem $ISYSROOT/usr/include/arm-linux-androideabi" \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--enable-static \
--disable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-small \
--enable-ffplay \
--disable-debug \
--disable-asm \
--disable-symver \
--disable-stripping \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -D__ANDROID_API__=21" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG

make clean
make -j4
make install

$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$PLATFORM/usr/lib \
-L$PLATFORM/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
libavdevice/libavdevice.a \
libpostproc/libpostproc.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a #修改点4: 4.8 or 4.9

}
# arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
ADDI_CFLAGS="-marm"
build_one

3、报错解决:
报错一: libavcodec/aaccoder.c:803:25: error: expected identifier or '(' before numeric constant
                     int B0 = 0, B1 = 0;
解决:把 B0 修改为 b0(可以任意改成别的变量名)

报错二: ibavcodec/hevc_mvs.c: In function 'derive_spatial_merge_candidates':
libavcodec/hevc_mvs.c:208:15: error: 'y0000000' undeclared (first use in this function)
             ((y ## v) >> s->ps.sps->log2_min_pu_size))

解决:prebuilts/ndk/current/platforms/android-21/arch-arm/usr/include/asm-generic/termbits.h 
或
prebuilts/ndk/current/platforms/android-21/arch-arm/usr/include/asm/termbits.h 
里找到:#define B0的位置,在下边添加一句:
#undef B0 

猜你喜欢

转载自blog.csdn.net/u010164190/article/details/81949288
今日推荐