Android 使用Freetype2为ARM构建FFmpeg

Android 使用Freetype2为ARM构建FFmpeg,android,linux,ffmpeg,configure,freetype,Android,Linux,Ffmpeg,Configure,Freetype,我正在尝试构建包含freetype库的FFmpeg二进制文件(drawtext filter需要它)。不幸的是,我无法正确配置ffmpeg,每次尝试都以“freetype未找到”错误结束 PS我试图构建guardian ffmpeg项目,但在配置过程中出现错误 PS2建筑平面ffmpeg工作得非常好 配置脚本: make distclean &./configure --target-os=linux \ --cross-prefix=arm-linux-androideabi- \ -

我正在尝试构建包含freetype库的FFmpeg二进制文件(drawtext filter需要它)。不幸的是,我无法正确配置ffmpeg,每次尝试都以“freetype未找到”错误结束

PS我试图构建guardian ffmpeg项目,但在配置过程中出现错误

PS2建筑平面ffmpeg工作得非常好

配置脚本:

make distclean &./configure --target-os=linux \
--cross-prefix=arm-linux-androideabi- \
--arch=arm \
--cpu=armv7-a \
--enable-libfreetype --enable-filter=drawtext \ #!Freetype params
--disable-network \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--enable-protocol=file \
--sysroot=${ANDROID_NDK_ROOT_PATH}/platforms/${ANDROID_API_VERSION}/arch-arm \
--prefix=build/armeabi-v7a \
--disable-asm \
--extra-cflags='-DANDROID -Ifreetype2/ -I${ANDROID_NDK_ROOT_PATH}/sources/cxx-stl/system/include -march=armv7-a -mfloat-abi=softfp' \
--extra-ldflags='-Wl,--fix-cortex-a8 -Lfreetype2/ -L../android-libs -Wl,-rpath-link,../android-libs' \
--extra-cxxflags='-Wno-multichar -fno-exceptions -fno-rtti'
make -j6 && make install || exit 0
目录结构:

ffmpeg/
   -ffmpeg dirs/
   -freetype2/
   -rest of ffmpeg files ( including configure, make, etc )
我检查了guardian项目中的补丁源,发现ffmpeg配置文件可能需要在
require\u libfreetype
方法中进行一些更改

提前谢谢(对我的英语不好表示歉意)

编辑: 以OSX小牛为基础, 最后3行
config.log
;OSX没有
pkg配置
,因此第二行中的
false

require_libfreetype
false --exists --print-errors freetype
ERROR: freetype not found
编辑: 解决方案

我已设法解决我的问题。我使用了Xubuntu 14.04 64位+Freetype 2.5.3+最新的FFmpeg repo+安装linux包“pkg_config”,并在FFmpeg配置脚本中进行了一些小修改(找到pkg_config并检查初始化变量)

freetype的配置文件:

NDK_BASE=/home/dpc/Documents/android-ndk-r9d/
NDK_PROCESSOR=x86_64
NDK_PLATFORM_LEVEL=9
NDK_ABI=arm
NDK_COMPILER_VERSION=4.6

# Android NDK setup
NDK_PLATFORM_LEVEL=9
NDK_ABI=arm
NDK_COMPILER_VERSION=4.6
NDK_SYSROOT=$NDK_BASE/platforms/android-$NDK_PLATFORM_LEVEL/arch-$NDK_ABI
NDK_UNAME=`uname -s | tr '[A-Z]' '[a-z]'`
if [ $NDK_ABI = "x86" ]; then
    HOST=i686-linux-android
    NDK_TOOLCHAIN=$NDK_ABI-$NDK_COMPILER_VERSION
else
    HOST=$NDK_ABI-linux-androideabi
    NDK_TOOLCHAIN=$HOST-$NDK_COMPILER_VERSION
fi
NDK_TOOLCHAIN_BASE=$NDK_BASE/toolchains/$NDK_TOOLCHAIN/prebuilt/$NDK_UNAME-$NDK_PROCESSOR
echo "dpc:" $NDK_TOOLCHAIN_BASE

CC="$NDK_TOOLCHAIN_BASE/bin/$HOST-gcc --sysroot=$NDK_SYSROOT"
LD=$NDK_TOOLCHAIN_BASE/bin/$HOST-ld
STRIP=$NDK_TOOLCHAIN_BASE/bin/$HOST-strip
PREFIX=$(pwd)/build

simple_config(){
make clean
./configure --host=arm-linux-androideabi --without-zlib --without-png --prefix=
make -j4
make install DESTDIR=$(pwd)
}

complex_config(){

    ./configure \
    CC="$CC" \
    LD="$LD" \
    CFLAGS="-std=gnu99 -mcpu=cortex-a8 -marm -mfloat-abi=softfp -mfpu=neon" \
    --host=$HOST \
    --with-sysroot="$NDK_SYSROOT" \
    --enable-static \
    --disable-shared \
    --prefix=$PREFIX
    --without-bzip2

    make -j4
    make install
}


make clean
complex_config
ffmpeg配置文件:

#!/bin/sh

ANDROID_NDK_ROOT_PATH=/home/dpc/Documents/android-ndk-r9d
ANDROID_API_VERSION=android-9
#export PATH=${ANDROID_NDK_ROOT_PATH}:${ANDROID_NDK_ROOT_PATH}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:$PATH
export PATH=${ANDROID_NDK_ROOT_PATH}:${ANDROID_NDK_ROOT_PATH}/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/:$PATH
echo $PATH
#export PKG_CONFIG_PATH=/home/dpc/Documents/freetype-2.5.3/build/lib/pkgconfig/
#echo $PKG_CONFIG_PATH

#armv7-a neon
#export ARCH=armeabi-v7a-neon
#./configure --target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm --cpu=armv7-a --sysroot=${ANDROID_NDK_ROOT_PATH}/platforms/${ANDROID_API_VERSION}/arch-arm --disable-avdevice --disable-decoder=h264_vdpau  --prefix=build/armeabi-v7a-neon --extra-cflags='-DANDROID -I${ANDROID_NDK_ROOT_PATH}/sources/cxx-stl/system/include -march=armv7-a -mfloat-abi=softfp -mfpu=neon' --extra-ldflags='-Wl,--fix-cortex-a8 -L../android-libs -Wl,-rpath-link,../android-libs' --extra-cxxflags='-Wno-multichar -fno-exceptions -fno-rtti'
#make -j6 && make install && make distclean|| exit 0

#armv7-a
export ARCH=armeabi-v7a
./configure --target-os=linux \
--cross-prefix=arm-linux-androideabi- \
--arch=arm \
--enable-libfreetype \
--cpu=armv7-a \
--sysroot=${ANDROID_NDK_ROOT_PATH}/platforms/${ANDROID_API_VERSION}/arch-arm \
--disable-avdevice \
--disable-decoder=h264_vdpau  \
--prefix=build/armeabi-v7a \
--extra-cflags='-DANDROID -I${ANDROID_NDK_ROOT_PATH}/sources/cxx-stl/system/include -march=armv7-a -mfloat-abi=softfp' \
--extra-ldflags='-Wl,--fix-cortex-a8 -L../android-libs -Wl,-rpath-link,../android-libs' \
--extra-cxxflags='-Wno-multichar -fno-exceptions -fno-rtti'
make -j6 && make install && make distclean|| exit 0

希望它能帮助别人(cc:@SinhHo)

我在Mac上支持android的
freetype
交叉编译
ffmpeg
时遇到了同样的错误

以下是错误输出

arm-linux-androideabi-gcc: error: /var/folders/f0/b79d4kbs6cd1gcgt39gpw7t80000gn/T//ffconf.2zxiYMYG.m: Objective-C compiler not installed on this system
require_libfreetype
false --exists --print-errors freetype2
ERROR: freetype2 not found
所以我认为错误是由
pkg config
引起的

我的解决方案是将
freetype
的pkgconfig文件添加到
PKG_CONFIG_路径
,并指定从端口安装的
PKG CONFIG

export PKG_CONFIG_PATH=../freetype-2.6.3/out/armeabi/lib/pkgconfig
./configure ... --pkg-config=/opt/local/bin/pkg-config ...
注意

我从android独立工具链构建了
freetype
库,配置如下

export CFLAGS="-fPIC"
./configure --host=arm-linux-androideabi \
--with-png=no --enable-shared=no --prefix=out/armeabi

希望它能对任何有类似问题的人有所帮助。

你能发布错误输出吗?@cRaZyByTe:我已经编辑了我的帖子。我不太确定如何处理它,也许你可以先编译libfreetype,然后再编译主makefile。@SinhHo不知怎的,我已经成功地编译了它(它工作得很好)。我将在今天晚些时候发布答案。@SinhHo抱歉,刚刚注意到你的评论。使用freetype构建ffmpeg的问题是缺少pkg_配置,这就是为什么我必须在linux上构建它并安装pkg_配置包的原因。您还需要打开ffmpeg配置脚本并检查$pkg_config的初始化。我不得不把它从“pkg_config”改为“pkg config”。这应该对你有帮助(我希望)你能帮我吗?我也试着这么做,我成功地编译了android上ffmpeg所需的所有依赖项(包括freetype),但它仍然显示“错误:使用pkg配置找不到freetype2”。我试着按你说的去做,但没有成功