2

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
    ^
4

3 に答える 3

5

Xcode 5 ツールチェーンでの関連する変更は、LLVM コンパイラがデフォルトで組み込みアセンブラを使用するようになり、組み込みアセンブラは ARM 統合アセンブリ言語により厳密に準拠する必要があることです。

Xcode 5 ツールチェーンでコンパイルするには、次の 2 つの方法があります。

  1. clang にフラグ -no-integrated-as を指定します。--extra-cflags に追加するとうまくいくはずです。(フラグは個々のファイルをコンパイルするときに機能しましたが、configure には使用しませんでした。) これを回避策と考えてください。

  2. x264 の common/arm サブディレクトリにあるアセンブリ ソース コードを修正します。これは実際には非常に簡単で、私がやったことです。これは正しい修正です。ところで、これらの変更を加えた x264 へのパッチを提出しようとしています。

アセンブラは多くのエラーを発行し、次の 4 つのカテゴリに分類されます。

  • cpu-aS では、「.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-aS には、「vmov.32 r0, r1, d0」という命令があります。これは正しくありません。vmov.32 は 32 ビット量を移動することを意味しますが、引数は d0 (64 ビット) を r0 と r1 に移動するように指示します。どうやら古いコンパイラは「.32」の部分をヒントに取っていたようです。「vmov r0、r1、d0」である必要があり、その変更はうまくいくと思いますが、正しい命令であるという絶対的な証拠はありません。

Apple Developer Forum の gparker に感謝します。彼/彼女の助けがなければ、私はこれを理解できなかったでしょう. フォーラム ディスカッションへのリンク。Apple ID が必要です。

于 2013-11-15T20:52:27.390 に答える
0

これまでのところ、唯一の解決策は--disable-asm.

于 2013-09-27T10:55:42.947 に答える
0

アセンブラーの最適化を無効にすることは悪い解決策だと思います。

長い調査の後、私は問題の根本を発見しました: アセンブラーのコンパイル中のclangはCFLAGSではなくASFLAGSを使用するため、 --extra-asflags="-arch armv7" を追加すると問題が解決します

./configure \
--host=arm-apple-darwin \
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk \
--prefix=armv7 \
--extra-cflags="-arch armv7" \
--extra-asflags="-arch armv7" \
--extra-ldflags="-arch armv7" \
--enable-pic \
--enable-static

注: ビットコードをサポートするには-fembed-bitcode、すべての追加フラグ パラメータに追加するだけです

于 2016-01-25T16:09:26.823 に答える