Мне не удается создать файл .so для android из FFMPEG - PullRequest
0 голосов
/ 13 июля 2020

Я много раз пробовал с разными версиями ffmpeg, но в итоге потерпел неудачу. Не знаю, как они написали. sh файл для настройки разных инструментов. Вот несколько файлов. sh, которые я пробовал, но все не удалось. Либо он показывает только папку android/share вместо

  • android / include

  • android / lib

  • android / share

OR

я получаю ошибку, например, no file or folder exist, et c

Я поделюсь build_arm64-v8a другая версия файлов ниже

ВЕРСИЯ 1

#!/bin/bash
export NDK=/media/sf_sharing/android-ndk
export HOST_TAG=linux-x86_64 # adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG

export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++

function build_arm64-v8a
{
  ./configure \
  --prefix=./android/arm64-v8a \
  --enable-static \
  --enable-pic \
  --disable-asm \
  --disable-opencl \
  --disable-cli \
  --host=aarch64-linux \
  --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
  --sysroot=$TOOLCHAIN/sysroot \

  make clean
  make
  make install
}

build_arm64-v8a
echo build_arm64-v8a finished

ВЕРСИЯ 2

#!/bin/bash

TOOLCHAIN=/media/sf_sharing/my-android-toolchain64
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
rm -f $(pwd)/compat/strtod.o
function build_one
{
./configure --prefix=$PREFIX --enable-shared --disable-static --enable-protocol=file --enable-pic --enable-small --disable-programs --disable-doc --disable-symver --target-os=android --enable-cross-compile --cross-prefix=$CROSS_PREFIX --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" --sysroot=$TOOLCHAIN/sysroot $ADDITIONAL_CONFIG_FLAG
make clean
make -j2
make install
}

CPU=arm64-v8a
mkdir -p $(pwd)/android/$CPU
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-march=armv8-a"
ADDI_LDFLAGS="-L$TOOLCHAIN/sysroot/usr/lib"
ADDITIONAL_CONFIG_FLAG="--arch=aarch64 --enable-yasm"
build_one

ВЕРСИЯ 3

#!/bin/bash
export NDK=/media/sf_sharing/android-ndk
export HOST_TAG=linux-x86_64 # adjust to your building host
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/$HOST_TAG

export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang
export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++

function build_arm64-v8a
{
  ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs="-lpthread -lm" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree \

  make clean
  make
  make install
}

build_arm64-v8a
echo build_arm64-v8a finished

Я использую

  • ffmpeg-snapshot.tar.bz2

  • android -ndk-r21d- linux -x86_64

единственное, что я знаю в «ndk 21», это то, что нам нужно использовать набор инструментов по умолчанию (android в документации сказано).

Как создать файл. sh для построения файла .so для использования в android?

1 Ответ

0 голосов
/ 15 июля 2020

Я рекомендую собрать самую простую версию с помощью --disable-everything и построить свою команду оттуда. Построил на ma c. Я отредактировал вашу третью попытку и построил для arm64 с одним кодом c следующим образом:


    #!/bin/bash
    export ANDROID_NDK_HOME=${HOME}/Library/Android/android-ndk-r21
    export HOST_TAG=darwin-x86_64 # adjust to your building host
    export TOOLCHAIN=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/$HOST_TAG
    
    function build_other
    {
       TARGET_ABI=arm64-v8a
       HOST=aarch64-linux-android
        ./configure --disable-everything --disable-doc --disable-programs --disable-shared --enable-cross-compile --arch=aarch64 --target-os=linux --enable-pic \
            --prefix="$HOME/ffmpeg_build" \
            --sysroot=${ANDROID_NDK_HOME}/sysroot \
            --enable-encoder=h261 --enable-decoder=h261 \
            --extra-ldflags="-L${ANDROID_NDK_HOME}/platforms/android-29/arch-arm64/usr/lib -lc" \
            --cc=${TOOLCHAIN}/bin/aarch64-linux-android29-clang --ld=${TOOLCHAIN}/bin/aarch64-linux-android-ld --strip=${TOOLCHAIN}/bin/aarch64-linux-android-strip
        
        make clean
        make
        make install
    }
    
    mkdir $HOME/ffmpeg_build 2> /dev/null 
    build_other
    echo build_arm64-v8a finished

ПРИМЕЧАНИЕ: я построил на ma c, это должно работать на linux. Также не связывайте pthread! pthread находится в lib c для android.

...