Gcc 当--sysroot指向另一个目录时,如何让FFmpeg找到已安装的库?

Gcc 当--sysroot指向另一个目录时,如何让FFmpeg找到已安装的库?,gcc,build,ffmpeg,android-ndk,sh,Gcc,Build,Ffmpeg,Android Ndk,Sh,我已经做了好几天了。我正在尝试用libmp3lame构建FFmpeg,以便在Android应用程序中使用。构建脚本设置一个--sysroot标志,该标志指向以Android可以使用的方式构建这些库所需的Android NDK目录 当我将标志添加到--enable-libmp3lame时,问题就出现了;在构建启动期间,我发现错误:libmp3lame>=3.98.3未找到。我知道已经安装了LAME及其库,因为我可以手动运行/configure--enable-libmp3lame,配置将顺利启动,

我已经做了好几天了。我正在尝试用libmp3lame构建FFmpeg,以便在Android应用程序中使用。构建脚本设置一个
--sysroot
标志,该标志指向以Android可以使用的方式构建这些库所需的Android NDK目录

当我将标志添加到
--enable-libmp3lame
时,问题就出现了;在构建启动期间,我发现
错误:libmp3lame>=3.98.3未找到
。我知道已经安装了LAME及其库,因为我可以手动运行
/configure--enable-libmp3lame
,配置将顺利启动,并显示libmp3lame已为此构建启用。然而,像这样的构建根本无法满足我的需要,因为我需要安卓NDK来做一些工作

我一直在追踪这个问题,直到这个构建脚本声明了sysroot,并且通过一些研究,我尝试将
-Luser/include
-L/user/include
添加到额外的cflags和ldflags(我已经读过它是gcc的默认搜索位置)。我也尝试过其他一些方法,但我相信这里有人可以帮助解决这个具体问题。整个构建脚本如下所示:

额外信息:

  • 构建操作系统:Ubuntu 11.10
  • FFmpeg版本:来自git的最新版本
  • LAME版本:3.9.x
  • 安卓NDK:r7
build.sh

#!/bin/bash

if [ "$NDK" = "" ]; then
    echo NDK variable not set, assuming ${HOME}/android-ndk
    export NDK=${HOME}/android-ndk
fi

SYSROOT=$NDK/platforms/android-3/arch-arm
# Expand the prebuilt/* path into the correct one
TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86`
export PATH=$TOOLCHAIN/bin:$PATH

rm -rf build/ffmpeg
mkdir -p build/ffmpeg
cd ffmpeg

# Don't build any neon version for now
for version in armv5te armv7a; do

        DEST=../build/ffmpeg
        FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm"
        FLAGS="$FLAGS --sysroot=$SYSROOT"
        FLAGS="$FLAGS --soname-prefix=/data/data/net.smartnotes/lib/"
        FLAGS="$FLAGS --enable-shared --disable-symver"
        FLAGS="$FLAGS --enable-small --optimization-flags=-O2"
        FLAGS="$FLAGS --disable-everything --enable-protocol=file"
        FLAGS="$FLAGS --enable-libmp3lame --enable-encoder=nellymoser"

        case "$version" in
                neon)
                    EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"
                    EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
                    # Runtime choosing neon vs non-neon requires
                    # renamed files
                    ABI="armeabi-v7a"
                    ;;
                armv7a)
                    # I have tried many things here.
                    EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp"
                    EXTRA_LDFLAGS=""
                    ABI="armeabi-v7a"
                    ;;
                *)
                    # I have tried many things here.
                    EXTRA_CFLAGS="-Luser/include"
                    EXTRA_LDFLAGS=""
                    ABI="armeabi"
                    ;;
        esac
        DEST="$DEST/$ABI"
        FLAGS="$FLAGS --prefix=$DEST"

        mkdir -p $DEST
        echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" > $DEST/info.txt
        ./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $DEST/configuration.txt
        [ $PIPESTATUS == 0 ] || exit 1
        make clean
        make -j4 || exit 1
        make install || exit 1

done

与其更改包含路径,不如尝试将“make install”创建的所有libmp3lame文件复制到脚本将在其中查找它们的相关目录中。插入ECHO语句,以找出出现错误的位置/CFLAGS/LDFLAGS的确切路径,并将文件复制到该位置,以便找到它们。

我看到您正在使用位于

我也遇到了同样的问题,解决方法如下:

  • 使用
  • 这是“bambuser.com”的原始
    build.sh
    与我使用的版本之间的一个小的
    diff

    3c3,6
    <  export NDK=${HOME}/downloads/android-ndk # r8d
    ---
    > if [ "$NDK" = "" ]; then
    >     echo NDK variable not set, assuming ${HOME}/android-ndk
    >     export NDK=${HOME}/android-ndk
    > fi
    15,16c18
    < #for version in armv5te armv7a; do
    <  for version in         armv7a; do
    ---
    > for version in armv5te armv7a; do
    24c26
    <     FLAGS="$FLAGS --disable-everything --enable-libmp3lame"
    ---
    >     FLAGS="$FLAGS --disable-everything"
    
  • 请注意,我仍然需要测试生成的FFmpeg构建。 说实话,现在我必须学会如何在我的应用程序中使用它……;)


    编辑:我尝试删除
    ——禁用所有内容
    ,它的构建也一样正常,有很多编码器、解码器等,但是
    构建
    目录的容量增加到了~40MB。

    我真的不知道实际的libmp3lame文件安装到了哪里。我确实签入了/user/include,其中有一个lame/lame.h文件,我把它放在了[…]android ndk/platforms/android-3/arch arm/user/include/lame dir中,但是这没有帮助。我一直怀疑头文件本身不足以剪切它。我也尝试过将一个文件夹复制并粘贴到上面的目录中,其中包含了蹩脚的标题和C文件。当然,只复制一个文件或一个文件夹是不行的。您必须确保已将所需的所有文件和文件夹复制到正确的位置。如果我没记错的话,“make install”应该打印出它复制的所有文件,这样你就可以重新生成LAME,在执行“make install”时,请注意所有的文件名和文件夹。谢谢,我通过下载LAME源代码并将其解压缩到一个目录中来做到这一点。当我调用'configure'时,我做了--prefix=(指定了这些生成的文件应该输出到的目录)。完成make安装,获取include和lib目录,并将其分别存储在Android NDK include和lib dir中。我仍然无法让它工作。我放弃了使用FFmpeg为我处理LAME的尝试,转而在我的应用程序中使用LAME的本机版本(我可以开始工作,但音频输出不正确)。[…][…]我在上启动了一个线程,因此关于这一点:。
    install prefix            ../build/ffmpeg/armeabi-v7a
    source path               /home/samuele/downloads/ffmpeg/ffmpeg-android/ffmpeg
    C compiler                arm-linux-androideabi-gcc
    ARCH                      arm (generic)
    big-endian                no
    runtime cpu detection     no
    ARMv5TE enabled           yes
    ARMv6 enabled             yes
    ARMv6T2 enabled           yes
    ARM VFP enabled           yes
    IWMMXT enabled            no
    NEON enabled              no
    debug symbols             yes
    strip symbols             yes
    optimizations             small
    static                    yes
    shared                    yes
    postprocessing support    no
    new filter support        yes
    network support           yes
    threading support         pthreads
    SDL support               no
    Sun medialib support      no
    AVISynth enabled          no
    frei0r enabled            no
    libdc1394 support         no
    libdirac enabled          no
    libfaac enabled           no
    libgsm enabled            no
    **libmp3lame enabled        yes**
    libnut enabled            no
    libopencore-amrnb support no
    libopencore-amrwb support no
    libopencv support         no
    libopenjpeg enabled       no
    librtmp enabled           no
    libschroedinger enabled   no
    libspeex enabled          no
    libtheora enabled         no
    libvorbis enabled         no
    libvpx enabled            no
    libx264 enabled           no
    libxavs enabled           no
    libxvid enabled           no
    zlib enabled              no
    bzlib enabled             no
    
    Enabled decoders:
    
    Enabled encoders:
    mpeg2video      nellymoser
    
    Enabled hwaccels:
    
    Enabled parsers:
    
    Enabled demuxers:
    
    Enabled muxers:
    
    Enabled protocols:
    
    Enabled filters:
    buffer
    
    Enabled bsfs:
    
    Enabled indevs:
    
    Enabled outdevs:
    
    License: LGPL version 2.1 or later
    Creating config.mak and config.h...
    libavutil/avconfig.h is unchanged