сбой сборки ffmpeg для armv6-7 - PullRequest
       16

сбой сборки ffmpeg для armv6-7

2 голосов
/ 10 августа 2011

Я пытался собрать ffmpeg всеми возможными способами. Я пытаюсь с последней ревизией из их репозитория git и со скриптом сборки, который у меня есть подтверждение того, что он работает, это из этого вопроса: Проблема компиляции libav iPhone SDK 4.3 . Сценарий был обновлен вчера и, видимо, работает на парня в вопросе.

Моя проблема в том, что он не генерирует файлы .a (или вообще любые файлы) для armv6 и armv7. и поэтому команды lipo , объединяющиеся в универсальные библиотеки, терпят неудачу. Я также пытался использовать сценарии сборки из iFrameExtractor , но безуспешно, в конце концов он тоже не работает с липо-командами, я получаю следующее:

lipo: can't open input file: ./compiled/armv6/lib/libavcodec.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libavdevice.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libavfilter.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libavformat.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libavutil.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libpostproc.a (No such file or directory)
lipo: can't open input file: ./compiled/armv6/lib/libswscale.a (No such file or directory)

и я также разместил весь вывод здесь , если у кого-то есть идеи, что там искать (потому что я не знаю, с чего начать, это почти 5000 строк вывода). я должен также упомянуть, что я собираю его для armv6 , armv7 и i386 . Я хочу импортировать его в XCode для получения кадров H.264 из видеопотока.

когда я пытаюсь собрать для armv6, я использую следующую конфигурацию:

./configure \
--enable-cross-compile \
--arch=arm \
--extra-cflags='-arch armv6' \
--extra-ldflags='-arch armv6' \
--target-os=darwin \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
--cpu=arm1176jzf-s \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/lib/system \
--prefix=compiled/armv6

и получите следующий вывод:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.log" produced by configure as this will help
solving the problem.

так что вопрос, какой c компилятор мне использовать? я пробовал разные: рука-яблочно-darwin10-GCC-4.2.1 рука-яблочно-darwin10-LLVM-GCC-4.2 НКУ

но с тем же результатом. gcc работает как для i386, так и для armv7, поэтому я думаю, что он должен работать и для armv6, а также

1 Ответ

3 голосов
/ 12 августа 2011

я использовал следующее для компиляции только для armv6 и armv7. Я не могу заставить его работать на i386, я получаю ошибки, что cutype и subcutype неправильны. очевидно, что cutype должен быть x86, а subcuptspe должен быть intel.

Во всяком случае, я использовал следующие сценарии сборки для компиляции (в итоге я использовал gcc, и это сработало, это были флаги настройки, которые были неверны с самого начала, я думаю) для архитектур arm:

скрипт сборки:

#!/bin/sh

set -e

SCRIPT_DIR=$( (cd -P $(dirname $0) && pwd) )
DIST_DIR_BASE=${DIST_DIR_BASE:="$SCRIPT_DIR/dist"}

if [ -d ffmpeg ]
then
  echo "Found ffmpeg source directory, no need to fetch from git..."
else
  echo "Fetching ffmpeg from git://git.videolan.org/ffmpeg.git..."
  git clone git://git.videolan.org/ffmpeg.git
fi

ARCHS=${ARCHS:-"armv6 armv7"}

for ARCH in $ARCHS
do
    FFMPEG_DIR=ffmpeg-$ARCH
    if [ -d $FFMPEG_DIR ]
    then
      echo "Removing old directory $FFMPEG_DIR"
      rm -rf $FFMPEG_DIR
    fi
    echo "Copying source for $ARCH to directory $FFMPEG_DIR"
    cp -a ffmpeg $FFMPEG_DIR

    cd $FFMPEG_DIR

    DIST_DIR=$DIST_DIR_BASE-$ARCH
    mkdir -p $DIST_DIR

    case $ARCH in
        armv6)
            EXTRA_FLAGS="--enable-cross-compile --target-os=darwin --arch=arm --cpu=arm1176jzf-s"
            EXTRA_CFLAGS="-arch $ARCH"
            EXTRA_LDFLAGS="-arch $ARCH"
            ;;
        armv7)
            EXTRA_FLAGS="--enable-cross-compile --target-os=darwin --arch=arm --cpu=cortex-a8 --enable-pic"
            EXTRA_CFLAGS="-arch $ARCH"
            EXTRA_LDFLAGS="-arch $ARCH"
            ;;
        x86_64)
            EXTRA_CC_FLAGS="-mdynamic-no-pic"
            ;;
    esac

    echo "Configuring ffmpeg for $ARCH..."
    ./configure \
    --prefix=$DIST_DIR \
    --extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
    --disable-bzlib \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffserver \
    --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
    --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
    --extra-ldflags="$EXTRA_LDFLAGS" \
    --extra-cflags="$EXTRA_CFLAGS" \
    $EXTRA_FLAGS

    echo "Installing ffmpeg for $ARCH..."
    make && make install

    cd $SCRIPT_DIR

    if [ -d $DIST_DIR/bin ]
    then
      rm -rf $DIST_DIR/bin
    fi
    if [ -d $DIST_DIR/share ]
    then
      rm -rf $DIST_DIR/share
    fi
done

и объединить скрипт libs:

#!/bin/bash

set -e

ARCHS="armv6 armv7"

for ARCH in $ARCHS
do
  if [ -d dist-$ARCH ]
  then
    MAIN_ARCH=$ARCH
  fi
done

if [ -z "$MAIN_ARCH" ]
then
  echo "Please compile an architecture"
  exit 1
fi


OUTPUT_DIR="dist-uarch"
rm -rf $OUTPUT_DIR

mkdir -p $OUTPUT_DIR/lib $OUTPUT_DIR/include

for LIB in dist-$MAIN_ARCH/lib/*.a
do
  LIB=`basename $LIB`
  LIPO_CREATE=""
  for ARCH in $ARCHS
  do
    if [ -d dist-$ARCH ]
    then
      LIPO_CREATE="$LIPO_CREATE-arch $ARCH dist-$ARCH/lib/$LIB "
    fi
  done
  OUTPUT="$OUTPUT_DIR/lib/$LIB"
  echo "Creating: $OUTPUT"
  lipo -create $LIPO_CREATE -output $OUTPUT
  lipo -info $OUTPUT
done

echo "Copying headers from dist-$MAIN_ARCH..."
cp -R dist-$MAIN_ARCH/include/* $OUTPUT_DIR/include

затем я импортирую файлы .a из BUILD-FOLDER / dist-uarch, и он встраивается в xcode как шарм!

...