2012-01-16 12 views
5

Tengo mi aplicación ejecutándose y probando en 10.7, pero luego me di cuenta de que también necesitaba que funcionara en versiones anteriores. Y desafortunadamente, comencé este proyecto con ARC desde el principio.Error de ARC al implementar en 10.6

Ahora mi configuración de compilación es depuración base sdk: 10.7, y release base sdk: 10.6. Y cuando intento para archivar mi aplicación, tengo el siguiente error:

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) 

Parece un problema con ARC, pero no tengo ni idea de por dónde empezar en la fijación de esto. ¿Alguna sugerencia? Gracias.

Respuesta

10

Debe configurar el SDK a 10.7, pero puede establecer el objetivo de Implementación en 10.6. Aunque hay algunas advertencias detalladas en esta pregunta: How to deploy to Snow Leopard with ARC enabled

+0

Gracias. De hecho, leí ese hilo, pero me confundí con el objetivo de despliegue y lancé sdk. Ahora está bien. Gracias. –

+0

En general, debe evitar tener diferentes versiones de SDK para depurar/liberar, ya que los marcos comprueban con qué vínculos y ocasionalmente se comportan de manera diferente para la compatibilidad –

3

Me encontré con esta pregunta cuando pulsé el mismo mensaje hoy. Tenía el SDK establecido en 10.7 y el objetivo de despliegue establecido en 10.6, pero seguía viendo este mensaje.

Mi proyecto utilizaba en su mayoría el código de liberación de retención manual – existente, con solo un par de archivos nuevos que usan ARC. En consecuencia, tenía ARC deshabilitado en la configuración de destino principal, y lo había habilitado selectivamente para los dos archivos agregando -fobjc-arc a la configuración de compilación por archivo (en Fases de compilación).

En una corazonada, habilité ARC en el destino, y luego descarté la configuración por archivo (quitando la marca de los dos archivos y agregando -fno-objc-arc a todos los demás) y ya no obtuve el error de enlace dinámico en 10.6 .

Cuestiones relacionadas