我正在尝试在MacOS Sierra机器上构建Android的静态库,用于FFmpeg。以下是我的
上面脚本的输出被放置在
我的问题是: 当我尝试使用
看着这里的讨论,我通过在
为了解决错误,我还添加了以下配置标志,以便特别针对Android选择
我的问题:
- 我还缺少什么? - 在我的`buildscript.sh`中需要什么来选择正确的ranlib并停止在从我的应用程序链接时抱怨存档符号表?
buildscript.sh
脚本,它非常基于这里的脚本。#!/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)
看着这里的讨论,我通过在
CPREFIX
中选择arm-linux-androideabi-ar
来做正确的事情。为了解决错误,我还添加了以下配置标志,以便特别针对Android选择
ranlib
,但似乎没有帮助。RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
我的问题:
- 我还缺少什么? - 在我的`buildscript.sh`中需要什么来选择正确的ranlib并停止在从我的应用程序链接时抱怨存档符号表?
$TOOLCHAIN/bin/arm-linux-androideabi-
,不包括 **ar
**。 - Alex CohnAR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
设置为配置标志之一是否可以? - TheWaterProgrammer