在ffmpeg项目中新增lib以及如何在so中调用so

我们知道在ffmpeg已经有了很多lib,比如avcode avdevice avutil等。

如果我们要现有的makefile框架中新增加一个lib叫做a.so,该如何修改?

本文基于ffmpeg4.3.4,如果验证版本有变,请自行调整。

  1. a自身的makefile可以参考现有的来修改:
    NAME    = a
    DESC    = FFmpeg new demo library
    HEADERS = a.h version.h
    OBJS    = a.o
  2. Makefile:
    FFLIBS := avutil a
  3. configure:
    # this list should be kept in linking order
    LIBRARY_LIST="
    avdevice
    avfilter
    swscale
    postproc
    avformat
    avcodec
    swresample
    avresample
    avutil
    a
    "
  4. ffbuild/common.mk
    ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample a

至此,只要a配置正确的makefile就应该能正确编译了。

扩展:如何 so 中调用so

上面介绍了如何扩展lib,假如ffmpeg原有的lib 叫 x.so, 我们二次开发了一个基于x.so的 a.so, 那么如何让a.so能正确调用到x.so?

configure:

# libraries, in any order
avenc_deps="ava"

说明上面的av是沿用ffmpeg默认命令习惯

附带make配置脚本

x86-64

TOOLS_DIR=toolchain/bin
./configure --enable-shared \
--disable-static \
--disable-x86asm \
--enable-cross-compile \
--strip=$TOOLS_DIR/llvm-strip \
--extra-cflags="-I$(pwd)/install/include" \
--extra-ldflags="-L$(pwd)/install/libs" \
--prefix=$(pwd)/install \
--target-os=linux \

arm

TOOLS_DIR=ndk-toolchain/bin
./configure --enable-shared \
--disable-static \
--disable-x86asm \
--enable-cross-compile \
--cc=$TOOLS_DIR/armv7a-linux-androideabi26-clang \
--cxx=$TOOLS_DIR/armv7a-linux-androideabi26-clang++ \
--strip=$TOOLS_DIR/llvm-strip \
--extra-cflags="-I$(pwd)/install/include" \
--extra-ldflags="-L$(pwd)/install/libs" \
--arch=arm \
--prefix=$(pwd)/install \
--target-os=android \