9

私はいつもここのキラーフォーラムに真新しい質問を追加することを躊躇します、しかし私はこのバグに近いものを見たことがありません。

.mファイルの1つをコンパイルしているときに、clangがクラッシュしたようです。誰かが以下の解決策を見た、または知っているなら、私は非常に義務があります。

このエラーは、XCode4.4.1を使用してリリース構成でarmv6用にビルドした場合発生します

しかし、デバッグ構成でarmv6用にビルドした場合、またはarmv7、armv7s、またはi386用にリリースした場合は発生しません。

特定のエラーは「ObjCARC収縮」です。

    1. <eof> parser at end of file
    2. Code generation
    3. Running pass 'Function Pass Manager' on module '/Users/Me/Documents/ThisProject/iOS/..../ClassFoo.m'.
    4. Running pass 'ObjC ARC contraction' on function '@"\01-[ClassFoo evalJS:]"'
    clang: error: unable to execute command: Segmentation fault: 11
    clang: error: clang frontend command failed due to signal (use -v to see invocation)
    clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.

../Intermediaries/Project.build/armv6/フォルダーに次のように表示されます。

    ClassFoo.dia

そして私は見るべきです(その周囲のすべてのファイルのように)

    ClassFoo.d
    ClassFoo.dia
    ClassFoo.o

誰かがその中の何かを認識した場合に備えて、clangスタックのトップ4は次のとおりです。

    0  clang             0x00000001010536f2 main + 17107682
    1  clang             0x0000000101053b79 main + 17108841
    2  libsystem_c.dylib 0x00007fff93c428ea _sigtramp + 26
    3  libsystem_c.dylib 0x00007fff93c7a54e tiny_malloc_from_free_list + 1078

編集:最近再試行したときに、-fno-objc-arcフラグに関する苦情が寄せられていることにも気づきました-おそらくコンパイラのシンボリックリンクが間違ったバイナリを指しているのでしょうか?

前もって感謝します、

マイル

4

4 に答える 4

4

ご関心をお寄せいただきありがとうございます。この質問に自分で回答する必要があることをお詫び申し上げますが、私が試した他の解決策では何も成功しませんでした。私は、うまくいけば他の何人かを助けるためのハウツーガイドとして、ここで私の冒険を文書化するために最善を尽くしました。

短いバージョン:

  1. Xcode 4.5+は、armv6(iphone 3g)へのビルドをサポートしていません。
  2. 4.5および4.4.1の新規インストールでは、元のエラーのさまざまなバージョンが発生しました。
  3. その理由は2つあります。

    • Xcodeが使用するxcspecファイルには、このアーキテクチャのエントリは含まれていません。
    • 4つの必要なlibclang_rt*.aファイルのarmv6スライスが削除されました。
  4. 解決策があります!(以下の長いバージョンを参照してください)

長いバージョン:

SOフォーラムの検索、アップル開発フォーラムの検索、グーグル、プロジェクト設定の際限のない操作、以前のSDKのXcode.appパッケージへのコピー、この質問の投稿、バグの提出など、この問題を解決するために私が行った多くの苛立たしい試みの中でAppleなどとの報告adinfinitum<-は、「そして無限に」という意味で、それぞれが明らかにするのに適切なものが何もないか、ほんの少しの情報しか持っていないように見えました。

このソリューションのレシピは、ついに1人の欲求不満で断固とした開発者と、1つの非常に長い夜のすべての集大成を取りました。

では、ハウツーはどこにありますか?

(ここ、仲間)

約12のステップがありますので、画像の下の最後のステップを忘れないでください!

免責事項:これは私自身の解決策であり、私にとってはうまく機能しますが、何が起こっているのか、何をしているのかわからない場合は、非常に注意してください。これらの手順に従おうとしています。そうは言っても、ここに行きます!

  1. まだコピーをお持ちでない場合は、http://connect.apple.comからXcode4.4.1をダウンロードしてください。
  2. エキス/PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk
  3. にコピーします/PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
  4. .xcspec次に、Xcode4.5で4つのXcodeファイルを編集します。

    • ここに移動します:/PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Specifications
    • 次のファイルを選択します。

      • iPhoneXcode4Options.xcspec
      • iPhoneOSArchitectures.xcspec
      • iPhoneCompilerOptions.xcspec
      • iPhoneClangOptions.xcspec
    • 右クリックして「Xcodeで開く」を選択します

  5. Xcode 4.4.1についても繰り返し、2つのウィンドウを並べて貼り付けます(これを簡単にするだけです)。
  6. armv6以下のように、いくつかのエントリ に追加します。iPhoneClangOptions.xcspec

  7. ここでも: iPhoneCompilerOptions.xcspec

  8. そしてここ: iPhoneXcode4Options.xcspec

  9. ここでは、Xcode4.4.1からXcode4.5へのエントリを切り取って貼り付けます。 iPhoneOSArchitectures.xcspec

  10. さて、あなたはその退屈なことを完了しました、イェーイ!編集したファイルを保存して、すべて閉じます。libclang_rt*.a次に、これらのアーチのコンパイルを処理するための新しいファイルを作成する必要があります。この手順は、ターミナルでより簡単に実行できます。次のコマンドを入力します。

バックアップがコピーされ、パスや入力にエラーがないことを確認してください。

 cd /PATH_TO_YOUR_Xcode_4.4.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin

 sudo mkdir armv6_extractions

 lipo -extract armv6 -output armv6_extractions/libclang_rt.ios.armv6.a libclang_rt.ios.a
 lipo -extract armv6 -output armv6_extractions/libclang_rt.profile_ios.armv6.a libclang_rt.profile_ios.a
 lipo -extract armv6 -output armv6_extractions/libclang_rt.cc_kext.armv6.a libclang_rt.cc_kext.a

 sudo cp -R armv6_extractions  /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin

 cd /PATH_TO_YOUR_Xcode_4.5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.2/lib/darwin

 sudo mkdir originals
 sudo cp libclang_rt.ios.a originals/
 sudo cp libclang_rt.cc_kext_ios5.a originals/
 sudo cp libclang_rt.profile_ios.a originals/

 lipo -create -output libclang_rt.ios.a armv6_extractions/libclang_rt.ios.armv6.a originals/libclang_rt.ios.a
 lipo -create -output libclang_rt.cc_kext_ios5.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.cc_kext_ios5.a
 lipo -create -output libclang_rt.profile_ios.a armv6_extractions/libclang_rt.cc_kext.armv6.a originals/libclang_rt.profile_ios.a
  1. Xcode4.5を再起動します

    ^ ...ここに「11」と書きました...なぜ「1」と表示されるのですか?

  2. プロジェクトを開き、それに応じて設定を編集します。armv6にビルドするためだけに別の構成を作成し、完了したらすべてをまとめて作成することをお勧めします。

    • armv6に追加Valid Architectures
    • armv6に追加Architectures
    • 特定のarmv6構成については、(ドロップダウンメニューに表示されているもの)に設定Base SDKします。iOS 5.x
    • 必要に応じて展開ターゲットを設定します(これまでにiOS4.1まで構築しましたが、最初にインストールしたiOS5.x SDKは4.xまで展開できると思います)

さて、私はそれがすべてだと思います。

誰かが行う必要のある編集を見つけた場合は、そうしてください。誰かがここで提供しなければならないフィードバックを歓迎します。

何か問題が発生した場合は、指を交差させて、いつでもXcodeを再インストールして再試行できます(またはしないでください)。

幸運を祈ります。

于 2012-12-17T20:07:34.650 に答える
1

コンパイラはクラッシュしないはずです。もしそうなら、ベンダーはそれを修正する必要があります。残念ながら、Appleからレーダーを介して有用な応答を得ることができないと思います。Xcode4.5には新しいバージョンのClangがあり、armv6をサポートしなくなったためです。

テクニカルサポートインシデントを開く必要があると言ったのは、おそらく回避策を提供できるからです。

于 2012-12-16T08:44:40.663 に答える
1

私は以前にこの問題を抱えていました....あなたはあなたの.mを2回以上初期化しましたか?またはそれをインポートしますか?この問題が発生したのは、ネイティブ環境以外の場所で.mファイルを初期化またはインポートしようとしたときだけです。

于 2012-12-13T20:19:18.637 に答える
0

エラーメッセージは、関数@ "\ 01- [ClassFoo evalJS:]"の処理中にコンパイラの内部エラーが発生したことを示しています。その関数のコードを再配置したり、その関数のローカル変数にvolatileを追加したりすることで、エラーを回避できる場合があります。

于 2012-11-16T22:48:21.177 に答える