我在为iOS编译x264时遇到错误。

我有Xcode版本5.0(5A1413)和Apple LLVM版本5.0(clang-500.2.75)(基于LLVM 3.3svn)。我正在编译x264-snapshot-20130925-2245。

配置:

CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ./configure \
--host=arm-apple-darwin \
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk \
--prefix=armv7 \
--extra-cflags='-arch armv7' \
--extra-ldflags="-L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system -arch armv7" \
--enable-pic \
--enable-static

出现错误:
common/arm/cpu-a.S:29:7: error: unknown token in expression
.align
      ^
common/arm/cpu-a.S:139:5: error: instruction 'suble' can not set flags, but 's' suffix specified
    subles ip, ip, #1
    ^

最佳答案

Xcode 5工具链中的相关更改是LLVM编译器现在默认使用内置汇编程序,并且内置汇编程序需要更严格地遵守ARM统一汇编语言。

有两种方法可以使其与Xcode 5工具链一起编译:

  • 给clang标志-no-integrated-as。将其添加到--extra-cflags应该起作用。 (该标志对我编译单个文件有用,但我从未将其用于配置。)考虑这是一种解决方法。
  • 修复x264的common/arm子目录中的程序集源代码。实际上,这很容易,这就是我所做的。这是正确的解决方法。顺便说一句,我将通过这些更改向x264提交补丁。

  • 汇编器发出许多错误,它们分为四类:
  • 在cpu-a.S中,“。align”指令应为“.align 2”。 (显然,它默认情况下默认为2,现在2必须是显式的。)
  • 多个文件中的一些subles和sublts指令。这些是“sub”(减)的变体,后跟一个条件(2个字符)和“s”后缀。现在,“s”必须先于条件。因此,“subles” =>“subsle”和“sublts” =>“subslt”。
  • 各种文件中有相当数量的ldrd指令。该指令的意思是“加载寄存器,加倍(从内存)”。它将2个32位字从存储器加载到寄存器中。以前只命名第一个寄存器是可以的。现在都需要命名。他们总是相邻的。因此,“ldrd r2,任何”都需要变为“ldrd r2,r3,任何”。 “ldrd r6,某物”变为“ldrd r6,r7,某物”。等等
  • 在pixel-a.S中,有一条指令“vmov.32 r0,r1,d0”。这是不正确的。 vmov.32表示移动32位量,但是参数说将d0(64位)移动到r0和r1中。显然,旧的编译器将“.32”部分作为提示。我认为它应该是“vmov r0,r1,d0”,并且该更改对我有用-但我没有绝对证据证明这是正确的说明。

  • 非常感谢Apple开发者论坛上的gparker!没有他/她的帮助,我无法弄清楚。 Link to forum discussion, Apple ID required.

    10-07 19:25
    查看更多