Frage

Meine Anwendung erstellt, läuft, simuliert usw.usw.gut!Sowohl auf den Simulatoren als auch auf den physischen Geräten funktioniert alles zu 100%.Keine Fehler oder Warnungen während des Baus.

Wenn ich jetzt versuche, mein Projekt zu archivieren, wird die folgende Fehlermeldung angezeigt:

0  clang             0x000000010bdb3472 _ZL15PrintStackTracePv + 34
1  clang             0x000000010bdb38f9 _ZL13SignalHandleri + 553
2  libsystem_c.dylib 0x00007fff8bd8ccfa _sigtramp + 26
3  libsystem_c.dylib 0x0000000000000001 _sigtramp + 18446603338169922337
4  clang             0x000000010bc7fbbf (anonymous namespace)::ObjCARCOpt::runOnFunction(llvm::Function&) + 7407
5  clang             0x000000010b0502b2 llvm::FPPassManager::runOnFunction(llvm::Function&) + 322
6  clang             0x000000010b052baf (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) + 1039
7  clang             0x000000010b050bc1 llvm::MPPassManager::runOnModule(llvm::Module&) + 289
8  clang             0x000000010b0505c5 llvm::PassManagerImpl::run(llvm::Module&) + 277
9  clang             0x000000010b0504ad llvm::PassManager::run(llvm::Module&) + 13
10 clang             0x000000010b02f0e8 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 4424
11 clang             0x000000010b02c941 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 513
12 clang             0x000000010aef83f6 clang::ParseAST(clang::Sema&, bool) + 406
13 clang             0x000000010aef6ed7 clang::CodeGenAction::ExecuteAction() + 855
14 clang             0x000000010aec943f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 879
15 clang             0x000000010aec80cb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2683
16 clang             0x000000010aeba8ce cc1_main(char const**, char const**, char const*, void*) + 5086
17 clang             0x000000010ae950d8 main + 648
18 clang             0x000000010ae94e44 start + 52
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 2 (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.
clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.mii
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.sh
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 254

und ich habe keine Ahnung warum.Ich jetzt kommt das Problem von Image.mm das benutze ich von der simple-iphone-image-processing Projekt.Und ich denke, es hat mit ARC zu tun.Kann jemand mehr Licht ins Dunkel bringen?

Danke


UPDATE

OK, also habe ich es einfach ein paar Mal ausprobiert und es hat funktioniert.Das Problem ist also intermittierend.Ich lasse diese Frage hier, wenn jemand anderes vielleicht etwas zu sagen hat.

War es hilfreich?

Lösung

Die Funktion, die bricht, ist ObjCARCOpt::runOnFunction(llvm::Function&).Nur zum Kichern habe ich den Code runOnFunction () unten gepostet.Der Zweck dieser Funktion ist die Optimierung von ARC-bezogenem Objektcode in der llvm::Function objekt, das übergeben wird.Das ist in Ordnung, aber es scheint einen Fehler im Compiler zu geben, der sich auf die Objective-C ++ - Handhabung bezieht, was mich ehrlich gesagt nicht überrascht.

Fehlerberichte wurden bereits an Apple gesendet (hier, hier, wahrscheinlich an anderen Orten).Sie sollten es auch melden.

Bis dahin gibt es ein paar Dinge, die ich vorschlagen könnte.

1) Da das Problem zeitweise auftritt, fahren Sie einfach mit Ihrem Projekt fort.Das könnte für dich funktionieren, oder vielleicht auch nicht.Schließlich sollen Compiler deterministisch sein...

2) Versuchen Sie, ARC für Ihre Obj-C ++ - Sachen auszuschalten.Dies ist wahrscheinlich der einfachste Weg.

3) Deaktivieren Sie die Bogenoptimierungen.Tun Sie dies, indem Sie weglassen -enable-objc-arc-opts von deinem Build.Wie dies mit den XCode-Build-Einstellungen gemacht wird, bleibt dem Leser als Übung überlassen.Wie auch immer, ich denke, Ihre beste Wette ist 2).

Code von llvm-3.0.src/lib/Transforms/Scalar/ObjCARC.cpp ist unten.Ihre beste Wette ist, um auszusteigen if (!Run) return false;. Run ist false, wenn ARC im zu analysierenden Modul deaktiviert ist.Viel Glück, vergiss nicht, diesen Fehlerbericht einzureichen!

bool ObjCARCOpt::runOnFunction(Function &F) {
  if (!EnableARCOpts)
    return false;

  // If nothing in the Module uses ARC, don't do anything.
  if (!Run)
    return false;

  Changed = false;

  PA.setAA(&getAnalysis<AliasAnalysis>());

  // This pass performs several distinct transformations. As a compile-time aid
  // when compiling code that isn't ObjC, skip these if the relevant ObjC
  // library functions aren't declared.

  // Preliminary optimizations. This also computs UsedInThisFunction.
  OptimizeIndividualCalls(F);

  // Optimizations for weak pointers.
  if (UsedInThisFunction & ((1 << IC_LoadWeak) |
                            (1 << IC_LoadWeakRetained) |
                            (1 << IC_StoreWeak) |
                            (1 << IC_InitWeak) |
                            (1 << IC_CopyWeak) |
                            (1 << IC_MoveWeak) |
                            (1 << IC_DestroyWeak)))
    OptimizeWeakCalls(F);

  // Optimizations for retain+release pairs.
  if (UsedInThisFunction & ((1 << IC_Retain) |
                            (1 << IC_RetainRV) |
                            (1 << IC_RetainBlock)))
    if (UsedInThisFunction & (1 << IC_Release))
      // Run OptimizeSequences until it either stops making changes or
      // no retain+release pair nesting is detected.
      while (OptimizeSequences(F)) {}

  // Optimizations if objc_autorelease is used.
  if (UsedInThisFunction &
      ((1 << IC_Autorelease) | (1 << IC_AutoreleaseRV)))
    OptimizeReturns(F);

  return Changed;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top