I am trying to create FFmpeg for android as static libraries on a MacOS Sierra machine .
Below is mine buildscript.sh
, which is very based on the value here
#!/bin/bash
cd ffmpeg-3.3.4
NDK=/path/to/android/ndk/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm64/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
CPREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
CXX=$TOOLCHAIN/bin/arm-linux-androideabi-g++
LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
X264LIB=$X264/android/arm/lib/
X264INC=$X264/android/arm/include/
function build_ffmpeg_android {
./configure \
--prefix=$PREFIX \
--disable-stripping
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--enable-cross-compile \
--enable-pic \
--disable-programs \
--enable-static \
--disable-shared \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-doc \
--enable-postproc \
--enable-swscale \
--enable-avfilter \
--enable-avresample \
--disable-opencl \
--disable-securetransport \
--enable-gpl \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -I$X264INC" \
--extra-ldflags="$ADDI_LDFLAGS -s -L$X264LIB -lx264" \
--enable-gpl \
--enable-decoders \
--enable-encoders \
--enable-muxers \
--enable-demuxers \
--enable-parsers \
--enable-protocols \
--enable-filters \
--enable-avresample \
--enable-libfreetype \
--disable-indevs \
--enable-indev=lavfi \
--disable-outdevs \
--enable-hwaccels \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-network \
--enable-libx264 \
--enable-zlib \
--enable-muxer=md5
make clean
make -j9
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_ffmpeg_android
The output of the above script is placed inside ffmpeg-3.3.4/android/arm
.
My problem:
When I try to link these libraries .a
with my application using -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice
,
I get the following linker error for each of them
:-1: error: error: avformat: no archive symbol table (run ranlib)
:-1: error: error: avcodec: no archive symbol table (run ranlib)
:-1: error: error: swscale: no archive symbol table (run ranlib)
:-1: error: error: avutil: no archive symbol table (run ranlib)
:-1: error: error: avfilter: no archive symbol table (run ranlib)
:-1: error: error: swresample: no archive symbol table (run ranlib)
:-1: error: error: avdevice: no archive symbol table (run ranlib)
Looking at this discussion here , I am doing it right by selecting arm-linux-androideabi-ar
at CPREFIX
.
, configure ranlib
, Android, , , .
RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
:
- ?
buildscript.sh
, ranlib ?