我们知道在ffmpeg已经有了很多lib,比如avcode avdevice avutil等。
如果我们要现有的makefile框架中新增加一个lib叫做a.so,该如何修改?
本文基于ffmpeg4.3.4,如果验证版本有变,请自行调整。
- a自身的makefile可以参考现有的来修改:
NAME = a DESC = FFmpeg new demo library HEADERS = a.h version.h OBJS = a.o
- Makefile:
FFLIBS := avutil a
- configure:
# this list should be kept in linking order LIBRARY_LIST=" avdevice avfilter swscale postproc avformat avcodec swresample avresample avutil a "
- 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 \