Ubuntu編譯FFmpeg4.0.2單獨so庫(驗證可用)
阿新 • • 發佈:2019-01-05
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 #修改點:1 PLATFORM=/home/working/Android5.1/prebuilts/ndk/9/platforms/android-19/arch-arm #修改點:2;如果是Mac系統編譯路徑則是:xxx/darwin-x86_64/xxx TOOLCHAIN=home/working/Android5.1/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8 #修改點:3 PREFIX=home/working/ffmpeg_so_file function build_one { ./configure \ --prefix=$PREFIX \ --target-os=linux \ --disable-doc \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --arch=arm \ --sysroot=$PLATFORM \ --extra-cflags="-I$PLATFORM/usr/include" \ --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \ --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \ --disable-shared \ --enable-runtime-cpudetect \ --enable-gpl \ --enable-small \ --enable-ffplay \ --enable-cross-compile \ --disable-debug \ --enable-static \ --disable-asm \ --disable-symver \ --disable-stripping \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make clean make -j8 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.8/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