2012-01-16 4 views
5

Mam uruchomioną aplikację i przetestowałem ją na 10.7, ale później zdałem sobie sprawę, że potrzebowałem jej również do pracy z wcześniejszymi wersjami. I niestety rozpocząłem ten projekt z ARC od samego początku.Błąd ARC podczas wdrażania do 10.6

Teraz moja konfiguracja kompilacji to baza debugowania sdk: 10.7 i wydanie wersji podstawowej sdk: 10.6. I gdy próbuję zarchiwizować moją aplikację, mam następujący błąd:

Undefined symbols for architecture x86_64: 
"_objc_retain", referenced from: 
    +[__ARCLite__ load] in libarclite_macosx.a(arclite.o) 
    -[AppDelegate applicationDidFinishLaunching:] in AppDelegate.o 
    -[AppDelegate managedObjectModel] in AppDelegate.o 
    -[AppDelegate persistentStoreCoordinator] in AppDelegate.o 
    -[AppDelegate managedObjectContext] in AppDelegate.o 
    -[AppDelegate windowWillReturnUndoManager:] in AppDelegate.o 
    -[AppDelegate saveAction:] in AppDelegate.o 
    ... 
(maybe you meant: _objc_retainedObject) 
"_objc_release", referenced from: 
    -[AppDelegate applicationDidFinishLaunching:] in AppDelegate.o 
    -[AppDelegate applicationFilesDirectory] in AppDelegate.o 
    -[AppDelegate managedObjectModel] in AppDelegate.o 
    -[AppDelegate persistentStoreCoordinator] in AppDelegate.o 
    -[AppDelegate managedObjectContext] in AppDelegate.o 
    -[AppDelegate windowWillReturnUndoManager:] in AppDelegate.o 
    -[AppDelegate saveAction:] in AppDelegate.o 
    ... 
"_objc_retainAutoreleasedReturnValue", referenced from: 
    -[AppDelegate applicationFilesDirectory] in AppDelegate.o 
    -[AppDelegate managedObjectModel] in AppDelegate.o 
    -[AppDelegate persistentStoreCoordinator] in AppDelegate.o 
    -[AppDelegate managedObjectContext] in AppDelegate.o 
    -[AppDelegate windowWillReturnUndoManager:] in AppDelegate.o 
    -[AppDelegate saveAction:] in AppDelegate.o 
    -[AppDelegate applicationShouldTerminate:] in AppDelegate.o 
    ... 
"_objc_autoreleaseReturnValue", referenced from: 
    -[AppDelegate applicationFilesDirectory] in AppDelegate.o 
    -[AppDelegate managedObjectModel] in AppDelegate.o 
    -[AppDelegate persistentStoreCoordinator] in AppDelegate.o 
    -[AppDelegate managedObjectContext] in AppDelegate.o 
    -[AppDelegate windowWillReturnUndoManager:] in AppDelegate.o 
    -[MainWindowController viewForTag:] in MainWindowController.o 
    -[MainWindowController tableView:objectValueForTableColumn:row:] in MainWindowController.o 
    ... 
"_objc_storeStrong", referenced from: 
    -[AppDelegate persistentStoreCoordinator] in AppDelegate.o 
    -[AppDelegate saveAction:] in AppDelegate.o 
    -[AppDelegate applicationShouldTerminate:] in AppDelegate.o 
    -[AppDelegate .cxx_destruct] in AppDelegate.o 
    -[MainWindowController init] in MainWindowController.o 
    -[MainWindowController viewForTag:] in MainWindowController.o 
    -[MainWindowController showUserFinderView:] in MainWindowController.o 
    ... 
"_objc_retainAutoreleaseReturnValue", referenced from: 
    +[MainWindowController sharedInstance] in MainWindowController.o 
    -[FileMetaData getFileName] in FileMetaData.o 
    -[FileMetaData getLastHash] in FileMetaData.o 
    -[FileMetaData getCreationDate] in FileMetaData.o 
    -[FileMetaData getLastModified] in FileMetaData.oe 
    -[FileMetaData getLocalPath] in FileMetaData.o 
    ... 
"_objc_autorelease", referenced from: 
    -[SBJsonParser objectWithString:error:] in SBJsonParser.o 
    -[SBJsonTokeniser getStringToken:] in SBJsonTokeniser.o 
    -[SBJsonTokeniser getNumberToken:] in SBJsonTokeniser.o 
    -[SBJsonUTF8Stream getRetainedStringFragment:] in SBJsonUTF8Stream.o 
    -[SBJsonWriter stringWithObject:error:] in SBJsonWriter.o 
"_objc_retainAutorelease", referenced from: 
    -[SBJsonTokeniser getStringToken:] in SBJsonTokeniser.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

To wygląda na problem z SM, ale nie mam pojęcia od czego zacząć na ustalenie tego. Jakieś sugestie? Dzięki.

Odpowiedz

10

Należy ustawić zestaw SDK na 10,7, ale można ustawić docelowe wdrożenie na 10.6. Istnieją pewne zastrzeżenia szczegółowe w tym pytaniu: How to deploy to Snow Leopard with ARC enabled

+0

Dzięki. Czytałem ten wątek, ale myliłem się z celem wdrożenia i wydałem sdk. Teraz jest w porządku. Dzięki. –

+0

Generalnie powinieneś unikać różnych wersji SDK do debugowania/wydawania, ponieważ frameworki sprawdzają, z którym połączeniem i czasami zachowują się inaczej, dla zgodności –

3

Natknęłam się na to pytanie, kiedy dzisiaj trafiam na tę samą wiadomość. Ustawiłem zestaw SDK na 10,7, a docelowe miejsce docelowe na 10,6, ale wciąż widziałem ten komunikat.

Mój projekt był w większości przy użyciu istniejącego kodu zwolnienia ręcznego z –, a tylko kilka nowych plików przy użyciu ARC. W związku z tym miałem ARC wyłączone w głównych ustawień docelowych i wybrałem selektywnie dla tych dwóch plików, dodając -fobjc-arc do ustawień kompilacji na plik (w fazie kompilacji).

W przeczuciu włączam ARC w celu, a następnie flopped ustawienia dla pliku (usunięcie flagi dla dwóch plików i dodanie -fno-objc-arc do wszystkich innych) i nie ma już błąd łącza dynamicznego na 10.6 .