Как я могу получить FFmpeg для поиска установленных библиотек, когда --sysroot указывает на другой каталог? - PullRequest
5 голосов
/ 03 февраля 2012

Я занимался этим буквально несколько дней.Я пытаюсь собрать FFmpeg с libmp3lame для использования в приложении Android.Сценарий сборки устанавливает флаг --sysroot, который указывает на каталог Android NDK, необходимый для сборки этих библиотек так, чтобы Android мог их использовать.

Проблема возникает, когда я добавляю флаг в --enable-libmp3lame;Я получаю ERROR: libmp3lame >= 3.98.3 not found во время запуска сборки.Я знаю, что LAME и его библиотеки установлены, потому что я могу просто запустить ./configure --enable-libmp3lame вручную, и конфигурация запускается без помех и показывает, что libmp3lame включен для этой сборки.Однако подобное построение просто не будет работать для того, для чего оно мне нужно, поскольку мне нужен Android NDK, чтобы выполнить какую-то работу.

Я отследил проблему до того факта, что этот скрипт сборки объявляетsysroot, и в ходе некоторых исследований я попытался добавить -Luser/include, -L/user/include к дополнительным cflags и ldflags (которые я прочитал - это место поиска по умолчанию для gcc).Я пробовал и несколько других вещей, но я уверен, что кто-то здесь может помочь с этой конкретной проблемой.Весь этот скрипт сборки выглядит следующим образом:

Дополнительная информация:

  • Сборка ОС: Ubuntu 11.10
  • FFmpeg Ver: последнее из git
  • LAMEВерсия: 3.9.x
  • Android 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

Ответы [ 2 ]

1 голос
/ 03 февраля 2013

Я видел, что вы используете проект, расположенный по адресу http://bambuser.com/opensource

У меня была та же проблема, и я решил ее следующим образом:

  1. скомпилируйте lame для Android с помощью https://github.com/intervigilium/liblame
  2. это маленький diff между исходным build.sh от "bambuser.com" и тем, который я использовал:

    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"
    
  3. из "межвидового промежутка""проект скопируйте папку liblame/jni/lame в PATH_TO_NDK/platforms/android-3/arch-arm/usr/include

  4. из проекта" intervigilium "скопируйте liblame/libs/armeabi-v7a/liblame.so в PATH_TO_NDK/platforms/android-3/arch-arm/usr/libs и RENAME в libmp3lame.so.
  5. наконец-то запустите build.sh.
  6. с вами все будет в порядке:

    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
    

Имейте в виду, мне все еще нужно проверить полученный FFmpegстроить.Честно говоря, теперь я должен научиться , как использовать его в моем приложении ...;)

РЕДАКТИРОВАТЬ: я попытался удалить --disable-everything, и он строит ОК так же, смного кодеров, декодеров и т. д., но увеличивается до ~ 40 МБ для build dir.

1 голос
/ 03 февраля 2012

Вместо того, чтобы изменять пути включения, почему бы вам не попробовать скопировать все файлы libmp3lame, которые были созданы с помощью 'make install', в соответствующий каталог, где их будет искать скрипт. Вставьте операторы ECHO, чтобы выяснить, что именно представляет собой PATH / CFLAGS / LDFLAGS в том месте, где вы получили ошибку, и скопируйте туда файлы, чтобы она их нашла.

...