2010-06-29 2 views
6

Ich habe vor kurzem auf iPhone SDK 4.0 aktualisiert und kann nicht mehr mein Projekt für den iPhone-Simulator erstellen. Das Problem ist, dass Klassen von einem meiner eigenen Bibliotheken nicht mehr von ld zu finden:Linker Fehler (nur Simulator) mit eigener Bibliothek nach Update auf iPhone SDK 4.0

"_OBJC_CLASS_$_Book", referenced from: 
    objc-class-ref-to-Book in Category.o 
    (maybe you meant: ...) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

ich schon einige anderen Beiträge zu ähnlichen Problemen lesen, wie z.B. here. "Leider", mein Problem hat nichts mit einem SDK-Framework zu tun, sondern mit meiner eigenen lib, so dass die dort genannten Lösungen hier nicht anwendbar sind.

Die Bibliothek ist unter "Link Binary mit Bibliotheken" meines Ziels enthalten, Bibliothek Suchpfade sind korrekt (überprüft dies mit XCode und mit einem einfachen Texteditor direkt in meiner Projektdatei) und korrekt zum gcc Befehl hinzugefügt.

Ich benutze iPhone Simulator 3.2 als Base SDK, aber das gleiche Problem tritt bei SDK 4.0. Auch dies funktioniert mit meinem Geräteziel, nicht jedoch mit meinem Simulatorziel. Es funktionierte jedoch mit beiden, bevor ich von iPhone SDK 3.2 auf 4.0 aktualisierte. Ich konnte diesen Fehler auch reproduzieren, indem ich ein neues Projekt mit nur einer Datei und der verknüpften Lib erstellte. Allerdings sollte die Lib in Ordnung sein, da es mit Simulator 3.2 funktionierte, bevor ich XCode und mein SDK aktualisierte.

Weitere Fakten: Mac OS X 10.6.3, XCode 3.2.3 64-Bit, iPhone OS 3.2, GCC 4.2

Jede Hilfe sehr geschätzt werden würde.


EDIT:

Nach SDK Neuinstallation 3.2, alles wieder zu erwarten war. Es ist zu beachten, dass die SDKs im Ordner /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs bei jeder Installation überschrieben werden. Ich habe dann versucht, SDK 4.0 erneut zu installieren, und derselbe Fehler wie oben trat auf. Ich habe an meinem Projekt nichts geändert und habe immer 3.2 als Base SDK verwendet.

Das Problem kann daher möglicherweise bis auf die folgenden Optionen verengt werden:

  • Apfel verändert etw. im Simulator SDK 3.2, die das Problem
  • eine Änderung in XCode 3.2.3 verursacht das Problem
  • falsch/fehlt Compiler-Flags beim Aufbau meiner eigenen Bibliothek (die Fahnen, jedoch würde nur dazu führen, Probleme mit einer veränderten SDK verursacht oder die geänderte IDE)

ich habe auch einen Ordner diff auf /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk für die alte und die neue Version dieses Ordners. Es stellte sich heraus, dass es innerhalb des "gleichen" SDK tatsächlich geringfügige Änderungen gibt. Ich denke aber immer noch, dass es ein IDE/Compiler-Flag-Problem ist.

Irgendwelche Ideen? Ich möchte nicht für immer bei 3.2 bleiben ...

+0

Ich hatte das gleiche Problem. Mysteriös geschah es nur für das "Release" aber auch nicht für den "Debug" Build, obwohl ich nach dem Update auf das 4.0 SDK nichts geändert habe. Das habe ich jedoch noch nicht untersucht. – Stiefel

Antwort

1

Ich konnte endlich herausfinden, welche Flags in meinem Compileraufruf fehlten, um meine lib zu erstellen. Also, um meine Frage zu beantworten: Wenn jemand Probleme hat, seine eigene statische Lib mit einem Ziel in XCode 3.2.3 zu verbinden (mit iPhoneSimulator3.2.sdk oder iPhoneSimulator4.0.sdk), müssen Sie Ihre lib mit den folgenden zwei Fahnen bauen:

-fobjc-abi-Version = 2

-fobjc-legacy-Versand

Nochmals vielen Dank an PhoneyDeveloper für his hints.

1

Stellen Sie sicher, dass Sie Ihre Bibliotheken mit demselben Basis-SDK neu kompilieren, das Sie für Ihre App verwenden.

+0

Danke für Ihre Antwort. Ich benutze das gleiche Basis-SDK, also scheint das nicht das Problem zu sein. Wie in einem anderen Forum (http://forums.macrumors.com/showthread.php?t=956090) vorgeschlagen, habe ich meine lib mit XCode anstelle der Befehlszeile erstellt und es hat funktioniert. Obwohl ich dann die gcc-Flags sowohl mit der Befehlszeile als auch mit XCode verwendete, funktioniert die manuell erstellte lib immer noch nicht mit meiner App ... – Flo

0

Ein anderer Gedanke - das ist mir in der Vergangenheit passiert, auch wenn Bibliotheken nicht beteiligt waren.

Vergewissern Sie sich, dass Sie keine Dateien mit der Option 'Gruppenordnerreferenzen' importiert haben. Es scheint, dass dies Xcode Kopfschmerzen bereitet. (Zumindest tat es in meinem Fall.)

0

Ich habe das gelöst, wenn ich Flags wie (-ObjC, -all_load) unter 'Other Linker Flags' entfernt habe, die ich im Projekt verwendet habe. Es gab tatsächlich -all_load Konflikt .

Verwandte Themen