2010-12-16 8 views
1

Ich teile ein Xcode-iPhone-Projekt in mehrere kleinere Projekte zur Wiederverwendung von Code auf. Die Struktur sieht wie folgt aus:Verknüpfungsfehler bei iPhone-App mit Querverweisen auf mehrere statische Bibliotheken

+------------+ 
| App  | 
+------------+ 
     | 
     +------------------+ 
     |     | 
+--------------+ +--------------+ 
| Static Lib A | | Static Lib B | 
+--------------+ +--------------+ 
     |    | 
     +----------------+ 
       | 
     +--------------+ +----------------+ 
     | Static Lib Z |--| Static Lib KAL | 
     +--------------+ +----------------+ 

Alles kompiliert korrekt, aber sobald die App verknüpft ist, kann der Linker nicht zwei Symbole der KAL (die Open-Source-Kalender lib) Bibliothek. Jede Bibliothek hat einen Querverweis und alle Archive werden der Build-Phase "Binär mit Bibliotheken verbinden" hinzugefügt.

Die Fehler sind:

undefinierte Symbole:
"_OBJC_CLASS _ $ _ KalViewController", verwiesen von:
objc-Klasse-ref-to-KalViewController in libA.a (AViewController.o)
„_OBJC_CLASS_ $ _KalDate“, verwiesen von:
objc-Klasse-ref-to-KalDate in libA.a (AViewController.o)
ld: Symbol (e) nicht
collect2 gefunden: ld returned 1 exit status

Ich benutze eine Klasse von LibZ in LibA's AViewController, der wiederum eine Klasse in LibKAL benutzt.

Alle Ideen sind herzlich willkommen.

PS: die Trennung von A und B ist einfach weil nicht jeder Build der App die Funktionalität der beiden benötigt.

Antwort

0

Okay, so wie viele Leute, nachdem ich mehrere Abende damit verbracht habe, das herauszufinden, habe ich es fast gleich nach der Platzierung geschafft.
Das Problem war, dass, wenn ich die Referenzen zu den Bibliotheksprojekten hinzugefügt hatte, Xcode die Projekte selbst als Abhängigkeiten anstatt der Archivdateien anbot. Was war der Grund für den Linker (offensichtlich) nicht die Symbole zu finden.

Verwandte Themen