【问题标题】:Compiling x264 for i386为 i386 编译 x264
【发布时间】:2011-08-25 14:57:48
【问题描述】:

如何为 i386 架构编译 x264 库?通常为了强制一个架构,我会使用以下命令:

./configure CC="gcc -arch i386" CXX="g++ -arch i386"

但它似乎不适用于 x264。

为了编译 x264,我对其进行了配置和制作,这会生成一个 x86_64 库。当我尝试使用上述命令强制 i386 架构时,我收到以下消息:

未知选项 CC=gcc -arch i386,被忽略 未知选项 CXX=g++ -arch i386,被忽略

configure 脚本然后打印出它是为 X86_64 平台配置的。我希望看到它为 i386 平台配置并生成 i386 二进制文件。

【问题讨论】:

  • 定义“它似乎不起作用”。
  • 您预计会发生什么?你看到了什么?
  • 为了编译 x264,我对其进行了配置和制作,这将产生一个 x86_64 库。当我尝试使用上述命令强制 i386 架构时,我收到以下消息: Unknown option CC=gcc -arch i386, ignored Unknown option CXX=g++ -arch i386, ignored 然后配置脚本打印出它是为X86_64 平台。我希望看到它为 i386 平台配置并生成 i386 二进制文件。
  • 你试过./configure --help吗?如果我没记错的话,x264 不使用普通的自动工具。
  • 我有,它对交叉编译没有帮助,它说有一个--host参数但我不知道我需要为i386输入的主机

标签: c++ c cross-compiling x264 i386


【解决方案1】:

Autotooled configure 脚本具有特殊的命令行参数 --build--host,它们用于配置交叉编译。一些旧的配置脚本试图通过检查编译器的输出来确定它们是交叉编译的,但是明确地告诉配置脚本更明智和更健壮。

例如,请参阅here。或this question

(哦,您看到的“未知选项”错误的直接原因是环境变量覆盖 sh 命令行上的脚本名称之前,不是在它之后。不是make,可以在make命令行本身上给出变量定义。)

【讨论】:

  • configure 采用这种方式已经很长时间了。
  • 哦。好吧,显然OP正在使用的那个没有。 (我从他引用的错误消息的措辞中推断出它的行为)。
  • 是的,你是对的。并不是所有的配置脚本都是自动配置的。
  • 所以如果我使用 ./configure --host=i386-apple-darwin10 它说“找不到工作的 C 编译器”,有没有办法打印有效主机列表?
【解决方案2】:

在阅读了配置脚本和 config.sub 文件后,我发现以下内容可用于构建 i386 版本的 libx264:

./configure --host=i386-apple-darwin

我也曾一度遇到过“找不到工作的 C 编译器”错误。我将 LDFLAGS 环境变量设置为错误。因此,在继续之前,请确保 LDFLAGS 和 CFLAGS 为空(或良好)。

export CFLAGS=""
export LDFLAGS=""

【讨论】:

    【解决方案3】:

    如果您有 x86-64 gcc,您可以提供“-m32”来要求它编译 32 位二进制文​​件。所以你应该可以像这样使用配置:

    ./configure CFLAGS="-m32"
    

    如果这不起作用,则可能是自动工具中的错误,并且 CFLAGS 被覆盖。您可以尝试另一种选择:

    make CFLAGS="-m32"
    

    后者的问题是你必须记住这样做,否则你最终会遇到一些为不同架构构建的目标文件的链接问题。

    【讨论】:

    • 您可能还需要 LDFLAGS="-m32" 才能正确完成链接。
    【解决方案4】:

    根据 Apple 在http://developer.apple.com/library/mac/#documentation/Porting/Conceptual/PortingUnix/compiling/compiling.html 的建议 试试:

    ./configure
    make CFLAGS="-arch i386" LDFLAGS="-arch i386"
    

    如果这不起作用,也添加 -isysroot 标志(但 10.6 或 10.7 而不是 10.4u)

    【讨论】:

    • 不幸的是这不起作用,它只会引发很多错误
    猜你喜欢
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多