2012-01-16 5 views
5

내 응용 프로그램을 실행하고 10.7에서 테스트했지만 나중에 이전 버전에서도 작동해야한다는 것을 깨달았습니다. 불행하게도 저는 ARC를 시작하면서이 프로젝트를 시작했습니다.10.6에 배포 할 때 ARC 오류가 발생했습니다.

내 빌드 설정은 디버그 기반 sdk : 10.7이며 릴리스 sdk : 10.6입니다. 내 응용 프로그램을 보관하려고 할 때, 나는 다음과 같은 오류 있어요 :

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) 

그것은 ARC에 문제처럼 보인다,하지만 난 아무 단서 곳을 고정에서 시작되지해야합니다. 어떤 제안? 감사.

답변

10

SDK를 10.7로 설정해야하지만 배포 대상을 10.6으로 설정할 수 있습니다. 이 질문에 자세히 설명되어 있지만 몇 가지주의 사항이 있습니다. How to deploy to Snow Leopard with ARC enabled

+0

감사합니다. 실제로 해당 스레드를 읽었지만 배포 대상과 혼동하여 sdk를 릴리스했습니다. 이제 괜찮아. 감사. –

+0

일반적으로 디버그/릴리스에 대해 서로 다른 SDK 버전을 사용하지 않는 것이 좋습니다. 프레임 워크는 링크 된 것을 확인하고 호환성을 위해 다르게 동작하는 경우가 있으므로 –

3

오늘 나는 같은 메시지를 쳤을 때이 질문을 보았습니다. SDK를 10.7로 설정하고 배포 대상을 10.6으로 설정했지만이 메시지가 계속 표시되었습니다.

내 프로젝트는 대부분 ARC를 사용하는 몇 가지 새로운 파일로 기존의 수동 유지 – 릴리스 코드를 사용하고있었습니다. 따라서 ARC 은 기본 대상 설정에서을 사용하지 않도록 설정하고 파일 당 빌드 설정 (빌드 단계 아래)에 -fobjc-arc을 추가하여 두 파일에 대해 선택적으로 사용하도록 설정했습니다.

예기치 않게 대상에서 ARC를 사용하도록 설정 한 다음 두 파일의 플래그를 제거하고 다른 모든 파일에 -fno-objc-arc을 추가하고 더 이상 10.6에서 동적 링크 오류가 발생하지 않습니다. .

관련 문제