5

Ich habe ein Xcode-Projekt, das eine "Master" statische Bibliotheksziel hat, die/Links zu einer Reihe anderer statischer Bibliotheken aus anderen Xcode-Projekten enthält.Building iPhone statische Bibliothek für Armv6 und Armv7, die eine andere statische Bibliothek enthält

Beim Erstellen des Master-Bibliotheksziels für "Optimiert (armv6 armv7)" tritt in der letzten Phase während des CreateUniversalBinary-Schritts ein Fehler auf. Für jede Datei .o der Bibliotheken, die von der Master-Bibliothek enthalten ist, wird der folgende Fehler gemeldet (zum Beispiel der FBConnectGlobal.o-Datei):

warning for architecture: armv6 same member name (FBConnectGlobal.o) 
in output file used for input files: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv6/libMTToolbox.a(FBConnectGlobal.o) 
and: /Developer_Beta/Builds/MTToolbox/MTToolbox.build/Debug-iphoneos/MTToolbox.build/Objects-normal/armv7/libMTToolbox.a(FBConnectGlobal.o) 
due to use of basename, truncation and blank padding 

Am Ende erzählt Xcode, dass der Build gelungen . Wenn Sie jedoch die endgültige statische Bibliothek in einem Anwendungsprojekt verwenden, wird sie nicht erstellt, da sie doppelte Symbole in einem Teil des Builds (armv6) findet und Symbole im anderen Teil des Builds (armv7) verfehlt.

Irgendwelche Ideen, wie das zu beheben?

M

+0

Erstellen Sie keine Bibliotheken in andere Bibliotheken - es ist ein Rezept für Verwirrung, doppelte Symbolfehler und schwer zu debuggende Ergebnisse . Überprüfen Sie diese Frage: http://stackoverflow.com/questions/2300867/how-can-i-avoid-duplicate-symbol-errors-in-xcode-with-shared-static-libraries/2300873#2300873 –

+0

Carl, danke . Vielleicht könntest du das als Antwort auf meine Frage anstatt auf den Kommentar posten, also könnte ich es als beantwortet markieren. –

Antwort

3

Sie Bibliotheken in anderen Bibliotheken nicht bauen - es ist ein Rezept für Verwirrung, Symbolfehler duplizieren, und schwer zu debuggen Ergebnisse. Überprüfen Sie diese Frage: How can I avoid "duplicate symbol" errors in xcode with shared static libraries?

+0

Ich muss hier zustimmen. Ich weiß nicht, was in der Theorie am besten ist, aber in der Praxis habe ich nur ein paar Wochen damit verbracht, jede Build-Einstellung und Konfiguration in der Sonne zu optimieren, umzuschalten und zu beschwingen. Am Ende funktionierte nur das Entfernen aller statischen Bibliotheken (sowohl Binärdateien als auch abhängiger Projekte zum Erstellen statischer Bibliotheken) aus der statischen Bibliothek, die von meiner App abhing. Verknüpfen Sie keine Bibliotheken mit Bibliotheken. Sei kein Held. Fügen Sie einfach alles direkt an Ihre App an. Sparen Sie sich dabei viel Zeit. – Prairiedogg

5

Ich denke nicht, dass das die Antwort überhaupt ist. Es wird völlig funktionieren, wenn Sie nicht zwei Architekturen dort haben. In dem Beispiel, das in dem Link angegeben ist, ist es möglich, die Bibliotheken a, b und c in eine Bibliothek zu verknüpfen und damit zu verknüpfen.

Das Problem, das Carl hat, ist, dass es zwei verschiedene Architekturen in der Bibliothek (arm6 und arm7) gibt und der Linker sie nicht richtig auflösen kann.

Ich habe das Problem gefunden. Es ist ein Fehler in Libtool, soweit ich das beurteilen kann. Siehe meinen Beitrag für eine Lösung:

https://binaryfinery.wordpress.com/2010/06/11/universal-static-library-problem-in-iphone-sdk/

+0

Du hast meinen Tag gerettet! Vielen Dank! –

+0

SOB-Blog ist down :(Deshalb schreiben gute SO-Antworten keine Links, sondern posten aussagekräftige Daten! – Kaa

+0

Entschuldigung. Ich dachte nicht, dass wir sieben Jahre später noch darüber lesen würden! Ein funktionierender Link ist https: // binaryfinery .wordpress.com/2010/06/11/universal-statisch-library-problem-in-iphone-sdk / – jamie

1

Ein weiteres Update fand ich ist Architekturen auf „ARMv6“ einzustellen. ARCHS_STANDARD_32_BIT hat sich von armv6 in "armv6 armv7" geändert, was den oben beschriebenen libtool-Fehler verschlimmert. Offensichtlich wird es nicht armv7 optimierte Binärdateien produzieren, aber es sollte immer noch gut funktionieren auf iPhone 4.

Verwandte Themen