【发布时间】:2018-03-17 14:39:27
【问题描述】:
我正在尝试在 MacOS Sierra 机器上为 android 构建 FFmpeg 作为静态库。
以下是我的buildscript.sh,它非常基于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
上面脚本的输出放在ffmpeg-3.3.4/android/arm里面。
我的问题:
当尝试使用 -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice 从我的应用程序链接到这些 .a 库时,
我收到以下 链接器错误 他们每个人
:-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)
查看this discussion here,我在CPREFIX 中选择arm-linux-androideabi-ar 是正确的。
为了解决这个错误,我还为ranlib 添加了以下配置标志,以便专门为 android 选择,但似乎没有帮助。
RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
我的问题:
- 我还缺少什么?
- 我的
buildscript.sh需要什么来选择正确的 ranlib 并在从我的应用程序链接时停止抱怨存档符号表?
【问题讨论】:
-
CPREFIX 应该是
$TOOLCHAIN/bin/arm-linux-androideabi-,不是ar。 -
@AlexCohn 可以将
AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar设置为配置标志之一吗? -
@AlexCohn 在问题中再次更新了我的脚本。我一直在拼命地尝试很多事情。但是这个错误没有成功:(如果你看一下我的脚本将不胜感激。请看一下。我已经更新了 no ar 建议但仍然不起作用。仍然缺少一些东西
-
现在为这个问题添加了赏金以引起关注
标签: ffmpeg android-ndk static-libraries static-linking configure