2016-03-31 7 views
4

Ich laufe in diesen ld-Zusicherungsfehler beim Erstellen eines iOS-dynamischen Framework in der Befehlszeile mit xcodebuild.xcodebuild linker assertion failure


0 0x10163b342 __assert_rtn + 144 
1 0x101678a3a archive::File<arm64>::makeObjectFileForMember(archive::File<arm64>::Entry const*) const + 1138 
2 0x1016783e8 archive::File<arm64>::justInTimeforEachAtom(char const*, ld::File::AtomHandler&) const + 122 
3 0x10168ea75 ld::tool::InputFiles::searchLibraries(char const*, bool, bool, bool, ld::File::AtomHandler&) const + 265 
4 0x101697db8 ld::tool::Resolver::resolveUndefines() + 160 
5 0x10169a117 ld::tool::Resolver::resolve() + 79 
6 0x10163c060 main + 812 
7 0x7fff9dd4c5ad start + 1 
A linker snapshot was created at: 
/tmp/MyKit-2016-02-31-154836.ld-snapshot 
ld: Assertion failed: (memberIndex != 0), function makeObjectFileForMember, file /Library/Caches/com.apple.xbs/Sources/ld64/ld64-253.9/src/ld/parsers/archive_file.cpp, line 355. 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Nach archive_file.cpp Quellcode (http://www.opensource.apple.com/source/ld64/ld64-253.3/src/ld/parsers/archive_file.cpp) es scheint, gibt es eine Art Symbol der Korruption sind, während ld eine Bibliothek geladen wird. Aber abgesehen davon habe ich keine Ahnung, wie dieses Problem behoben werden könnte.

Dieses Problem tritt nur auf, wenn ich versuche, mein Framework mit aktiviertem Bitcode durch Hinzufügen des Compiler-Flags "-fembed-bitcode" zu erstellen.

Außerdem versuche ich in meinem ld-Befehl, gegen einige statische Bibliotheken zu verknüpfen, eine davon ist> 4,25 GB (mit eingebautem Bitcode), und diese Größe überschreitet den Maximalwert einer vorzeichenlosen 32-Bit-Ganzzahl (~ 3,99 GB). Ich habe vorher ein paar Probleme mit libtool festgestellt, die damit zusammenhängen, dass ich mit großen binären Bibliotheken nicht umgehen kann. Das ist einer meiner Gründe.

Ich frage mich, ob jemand ähnliche Probleme gesehen oder herauszufinden, wie man es beheben kann? Dank

ein paar ähnliche Fragen

Weird xCode linker error I've never seen before saying "Assertion failed"

https://github.com/SciRuby/nmatrix/issues/69

http://lists.llvm.org/pipermail/llvm-dev/2013-October/066722.html

https://github.com/TrinityCore/TrinityCore/issues/14689

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57438

+1

4,25 GB statische Bibliothek?!? : o – Almo

Antwort

5

Möchten Sie die Erklärung für Ihren Fehler lesen, der ld: Assertion failed: (memberIndex != 0) ... ist? Follow this link

Sorgen Sie sich auch nicht um die Größe Ihrer statischen Bibliothek. Der Linker entfernt alle unnötigen Informationen in der endgültigen ausführbaren Datei. Bitte lesen Sie here

TL; DR-Version:

  1. Reinigen Sie Ihr Projekt mit Command-Option-Shift-K. Wählen Sie auch Window > Organizer und wechseln Sie zur Registerkarte Projects. Klicken Sie auf den Rechtspfeil rechts neben dem Ordnernamen Derived Data, löschen Sie den Ordner Derived Data, und starten Sie XCode neu.

  2. gehen zu Build Settings in Ihrem project's settings =>Linking->Other linker flags => add -v finden. Dies zeigt Ihnen die genaue beschädigte Datei, die Ihren Fehler verursacht, wenn es noch auftritt. Wenn Sie den Fehler erneut haben, senden Sie bitte den Pfad der beschädigten Datei hier, wir können von dort aus arbeiten.

  3. Der Grund Ihres Fehlers ist, weil eine Ihrer statischen Bibliothek ist beschädigt. Sie können Ihre 4,25 GB lib entfernen und erneut erstellen, um zu sehen, ob dies das Problem ist. Es befindet sich unter target settings -> build phases -> link binary with libraries Ihres Projekts. Wenn der Fehler verschwindet, könnte es das sein. Geben Sie in diesem Fall den Namen der Lib an?

+0

danke. Ich habe # 1 und # 2 versucht und sie geben mir den gleichen Fehler. -v gibt auch nicht viele zusätzliche Informationen. Für # 3 wird linker einen nicht aufgelösten Symbolfehler melden, wenn ich die statische Bibliothek entferne, da die lib von anderen Teilen des Codes benötigt wird, während das Framework verlinkt wird. – dennycd

+0

Wie heißt die Bibliothek? Außerdem können Sie mithilfe von'Erzeugen von Debug-Symbolen- in Projekteinstellungen die Größe der statischen Bibliothek beim Erstellen reduzieren. – donkey