菜鸟教程小白 发表于 2022-12-13 08:47:40

iphone - 为 armv6-7 构建 ffmpeg 失败


                                            <p><p>我一直在尝试以我能想到的所有可能方式构建 ffmpeg。我正在尝试使用他们的 git 存储库中的最新版本和一个构建脚本,我已经确认它可以工作,它来自这个问题:<a href="https://stackoverflow.com/questions/5516170/iphone-sdk-4-3-libav-compiling-problem/6075920#comment-8351950" rel="noreferrer noopener nofollow">iPhone SDK 4.3 libav compiling problem</a> .该脚本昨天更新,显然适用于问题中的那个人。</p>

<p>我的问题是它不会为 armv6 anc armv7 生成 .a 文件(或实际上任何文件)。因此 <strong>lipo</strong> 命令连接到通用库中失败。我也尝试过使用 <a href="https://github.com/lajos/iFrameExtractor" rel="noreferrer noopener nofollow">iFrameExtractor</a> 中的构建脚本如果没有任何成功,它最终也会因 lipo-commands 而失败,我得到以下信息:</p>

<pre><code>lipo: can&#39;t open input file: ./compiled/armv6/lib/libavcodec.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libavdevice.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libavfilter.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libavformat.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libavutil.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libpostproc.a (No such file or directory)
lipo: can&#39;t open input file: ./compiled/armv6/lib/libswscale.a (No such file or directory)
</code></pre>

<p>我还发布了整个输出 <a href="https://rapidshare.com/files/3444142529/output.txt" rel="noreferrer noopener nofollow">here</a>如果有人知道在那里寻找什么(因为我不知道从哪里开始,它几乎有 5000 行输出。)
我还应该提到我正在为 <strong>armv6</strong>、<strong>armv7</strong> 和 <strong>i386</strong> 编译它。我想将它导入 XCode 以从视频源中获取 H.264 帧。</p>

<p>当我尝试为 armv6 构建时,我使用以下配置:</p>

<pre><code>./configure \
--enable-cross-compile \
--arch=arm \
--extra-cflags=&#39;-arch armv6&#39; \
--extra-ldflags=&#39;-arch armv6&#39; \
--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
</code></pre>

<p>并得到以下输出:</p>

<pre><code>/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 &#34;config.log&#34; produced by configure as this will help
solving the problem.
</code></pre>

<p>所以问题是,我应该使用什么 c 编译器?我尝试过不同的:
arm-apple-darwin10-gcc-4.2.1
arm-apple-darwin10-llvm-gcc-4.2
海合会</p>

<p>但结果相同。 gcc 适用于 i386 和 armv7,所以我想它也适用于 armv6</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我使用以下内容仅针对 armv6 和 armv7 进行编译。我无法让它为 i386 工作,我收到 cputype 和 subcputype 错误的错误。显然 cputype 应该是 x86 而 subcputype 应该是 intel。 </p>

<p>无论如何,我使用以下构建脚本来编译 arm 架构(我最终使用 gcc 并且它起作用了,我猜是配置标志从一开始就错了):</p>

<p>构建脚本:</p>

<pre><code>#!/bin/sh

set -e

SCRIPT_DIR=$( (cd -P $(dirname $0) &amp;&amp; pwd) )
DIST_DIR_BASE=${DIST_DIR_BASE:=&#34;$SCRIPT_DIR/dist&#34;}

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

ARCHS=${ARCHS:-&#34;armv6 armv7&#34;}

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

    cd $FFMPEG_DIR

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

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

    echo &#34;Configuring ffmpeg for $ARCH...&#34;
    ./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=&#34;$EXTRA_LDFLAGS&#34; \
    --extra-cflags=&#34;$EXTRA_CFLAGS&#34; \
    $EXTRA_FLAGS

    echo &#34;Installing ffmpeg for $ARCH...&#34;
    make &amp;&amp; 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
</code></pre>

<p>并结合 libs 脚本:</p>

<pre><code>#!/bin/bash

set -e

ARCHS=&#34;armv6 armv7&#34;

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

if [ -z &#34;$MAIN_ARCH&#34; ]
then
echo &#34;Please compile an architecture&#34;
exit 1
fi


OUTPUT_DIR=&#34;dist-uarch&#34;
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=&#34;&#34;
for ARCH in $ARCHS
do
    if [ -d dist-$ARCH ]
    then
      LIPO_CREATE=&#34;$LIPO_CREATE-arch $ARCH dist-$ARCH/lib/$LIB &#34;
    fi
done
OUTPUT=&#34;$OUTPUT_DIR/lib/$LIB&#34;
echo &#34;Creating: $OUTPUT&#34;
lipo -create $LIPO_CREATE -output $OUTPUT
lipo -info $OUTPUT
done

echo &#34;Copying headers from dist-$MAIN_ARCH...&#34;
cp -R dist-$MAIN_ARCH/include/* $OUTPUT_DIR/include
</code></pre>

<p>然后我从 BUILD-FOLDER/dist-uarch 导入 .a 文件,它像魅力一样在 xcode 中构建!</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 为 armv6-7 构建 ffmpeg 失败,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7007305/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7007305/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 为 armv6-7 构建 ffmpeg 失败