【问题标题】:ARC error when deploying to 10.6部署到 10.6 时出现 ARC 错误
【发布时间】:2012-01-16 15:52:26
【问题描述】:

我的应用在 10.7 上运行和测试,但后来意识到我也需要它在早期版本上工作。不幸的是,我从一开始就使用 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 的问题,但我不知道从哪里着手解决这个问题。有什么建议么?谢谢。

【问题讨论】:

    标签: objective-c cocoa automatic-ref-counting


    【解决方案1】:

    您需要将 SDK 设置为 10.7 - 但您可以将部署目标设置为 10.6。尽管在这个问题中有详细说明,但有一些警告:How to deploy to Snow Leopard with ARC enabled

    【讨论】:

    • 谢谢。我实际上阅读了该线程,但对部署目标和发布 sdk 感到困惑。现在好了。谢谢。
    • 一般来说,您应该避免使用不同的 SDK 版本进行调试/发布,因为框架会检查您链接的对象,并且偶尔会因兼容性而表现不同
    【解决方案2】:

    我今天收到同样的消息时遇到了这个问题。我将 SDK 设置为 10.7,部署目标设置为 10.6,但仍然看到此消息。

    我的项目主要使用现有的手动保留发布代码,只有几个新文件使用 ARC。因此,我在主要目标设置中禁用 ARC,并通过将-fobjc-arc 添加到每个文件的构建设置(在构建阶段下)选择性地为这两个文件启用它。

    凭直觉,我在目标中启用了 ARC,然后取消了每个文件的设置(删除了两个文件的标志,并将 -fno-objc-arc 添加到所有其他文件)并且不再出现动态链接错误10.6.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2017-12-18
      • 2014-11-09
      • 2020-11-04
      • 2018-12-07
      • 1970-01-01
      • 2016-10-17
      • 2015-01-21
      相关资源
      最近更新 更多