2011-08-10 9 views
2

私は考えることのできるすべての方法でffmpegを構築しようとしてきました。私は彼らのgitリポジトリから最新のリビジョンを試しています。そして、それが動作することを確認するビルドスクリプトを使って試しています。それはこの質問からです:iPhone SDK 4.3 libav compiling problem。スクリプトは昨日更新され、明らかに質問の男のために働く。armv6-7のためのffmpegをビルドできない

私の問題は、armv6 anc armv7の.aファイル(または実際には任意のファイル)を生成しないということです。そのためにlipoコマンドは、ユニバーサルlibsに連結するために失敗します。私も、私は次を得る、それはまた、最終的にはリポコマンドで失敗した任意の成功なし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) 

と、誰もが持っている場合、私はまた、全体の出力hereを掲載していますそこを探すためにどのような任意のアイデア(私は出力の、それはほぼ5000行を開始する場所を知らないので。) はまた、私はARMv6ののARMv7i386ののためにそれをコンパイルしてることを言及する必要があります。ビデオフィードからH.26​​4フレームを取得するには、XCodeでインポートします。

私は、次のconfigureを使用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 
[email protected] 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の

が、同じ結果に

。 gccはi386とarmv7の両方で動作するので、armv6でもうまく動作するはずです。

+0

FFPLEGにLGPL/GPLのライセンスが付与されているため、App Storeに提出したいアプリに対してFFMPEGを使用することはできません。 – DarkDust

+0

@DarkDustはい私は知っています。私はそれをとにかくコンパイルしたい。リアルタイムでh.264フレームを取得するために他に何が使えるかについての提案はありますか? –

+0

[iFrameExtractorのためのffmpegをコンパイルする問題の可能性のある複製](http://stackoverflow.com/questions/6994151/problem-compiling-ffmpeg-for-iframeextractor) –

答えて

3

私はarmv6とarmv7だけをコンパイルするために以下を使いました。私はそれがi386のために働くことができなかった、私はcputypeとsubcputypeが間違っているエラーを受け取る。明らかにcputypeはx86であり、subcputypeはIntelであるはずです。

ビルドスクリプト:

はとにかく私はコンパイルするには、以下の構築スクリプトを使用ARMアーキテクチャのため(私はGCCを使用して終了し、それが働いていた、それは最初から間違っていたのconfigureフラグ、私は推測した)

#!/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 

が、私はBUILD-FOLDER/distの-uarchから.Aファイルをインポートし、それが魅力のようにXcodeでビルドします!

+0

cputypeエラーについては、** clean && make && make install **もう一度。 **きれいにしなさい**はトリックをする – onmyway133

関連する問題