【问题标题】:Unable to compile i386 compatible ffmpeg dylibs on Mac OS X无法在 Mac OS X 上编译兼容 i386 的 ffmpeg dylib
【发布时间】:2012-01-03 12:16:01
【问题描述】:

我正在运行 64 位 Lion,但我需要编译 32 位版本的 ffmpeg,因为我正在使用的另一个库仅提供 32 位版本。我尝试了许多不同的配置,但它们都给了我错误。这是我尝试过的:

./configure --disable-static --enable-shared --disable-outdev=sdl --disable-bzlib --disable-libfreetype --disable-libopenjpeg --enable-zlib --enable-runtime-cpudetect --arch=i386 --extra-cflags="-arch i386" --extra-ldflags="-arch i386" --target-os=darwin --enable-cross-compile

./configure --disable-static --enable-shared --disable-outdev=sdl --disable-bzlib --disable-libfreetype --disable-libopenjpeg --enable-zlib --enable-runtime-cpudetect --arch=i386 --extra-cflags="-arch i386" --extra-ldflags="-arch i386"

./configure --disable-static --enable-shared --disable-outdev=sdl --disable-bzlib --disable-libfreetype --disable-libopenjpeg --enable-zlib --enable-runtime-cpudetect --arch=x86_32

我要么在 make 期间收到“寄存器分配期间寄存器用完”错误,要么 gcc 抱怨交叉编译未激活。

【问题讨论】:

    标签: macos ffmpeg x86 osx-lion 32bit-64bit


    【解决方案1】:

    我要大胆猜测一下——它是在建造吗:libavcodec/h264_cabac.o

    尝试添加-fomit-frame-pointer。 IIRC,有一些 gcc 内联汇编无法获得足够的寄存器。此选项释放 %ebp 以用作通用寄存器。

    【讨论】:

    • 没错,它总是在libavcodec/h264_cabac.o 上。我尝试将-fomit-frame-pointer 添加到extra-cflagsextra-ldflags 但我仍然遇到同样的错误。
    【解决方案2】:

    您可以尝试使用 -m32 标志,它告诉 gcc 仅编译 32 位。

    【讨论】:

    • 将此添加到extra-cflagsextra-ldflags 时不走运 :-(。关于寄存器用完的相同错误。
    • 我也按照lists.mplayerhq.hu/pipermail/mplayer-users/2011-August/… 的建议添加了 -cc="gcc -m32" 但得到了相同的结果
    • 糟糕,抱歉,我跳过了你写的关于寄存器错误的内容。这可能与 32 位标志无关,您需要先弄清楚这一点。
    • 嗯,我认为这有点相关,因为如果我将内容保留在 64 位,我可以编译得很好。
    【解决方案3】:

    通过使用 clang 而不是 gcc,我能够在 ffmpeg build 08d2cee4 上完成这项工作。所以这里是配置行:

    ./configure --disable-static --enable-shared --disable-outdev=sdl --enable-runtime-cpudetect --disable-bzlib --disable-libfreetype --disable-libopenjpeg --enable-zlib --cc="clang -m32"
    

    感谢 libav-user 的 Carl!

    这是我的帖子,以防它帮助任何人:http://ffmpeg.org/pipermail/libav-user/2011-December/001013.html

    【讨论】:

      【解决方案4】:

      我用 --disable-asm 解决了“寄存器分配期间寄存器用完”的错误

      也许你可以试试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        • 2014-09-06
        相关资源
        最近更新 更多