zou*_*oul 24 xcode objective-c automatic-ref-counting
我有一个非ARC项目,它使用支持ARC的静态库.这是一个受支持的方案,所以一切正常.也就是说,直到我在4.x设备上运行代码,包括模拟器.在这种情况下,代码会出现以下链接器错误:
dyld: lazy symbol binding failed: Symbol not found: _objc_storeStrong
Referenced from: /Users/zoul/Library/Application Support/iPhone Simulator/4.3.2/Applications/…/Demo.app/Demo
Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
Run Code Online (Sandbox Code Playgroud)
只要某些启用ARC的代码尝试调用_objc_storeStrong
函数,就会发生这种情况,就像在init
method(self = [super init]
)中一样.将主项目转换为ARC可以解决问题,但我想知道是否还有其他解决方案.
jus*_*tin 30
我假设工具链可能添加了必要的库链接,以便ARC正常工作.因此链接器转录本可能包含这条信息.如果应用程序本身的项目未启用ARC,则默认情况下可能无法获取这些项目,但您仍可以通过显式定义它们来链接它们.
查看构建脚本,您确实可以在那里找到适当的链接器标志:它被调用-fobjc-arc
(就像相关的编译器标志一样).将此设置添加到其他链接器标志时,链接器将包含带有主构建产品的ARC库,并且代码应运行正常.
我正在为此添加一个新的答案,因为先前接受的解决方案似乎不再适用于Xcode 4.3.2.我只能假设-fobjc-arc
链接器标志永远不会被暴露,现在已被删除.
这似乎是一个众所周知的问题,尽管我可以在这篇文章中发现的唯一主题是苹果公司对devforums的评论可以追溯到2011年年中.从该线程,建议手动链接以下文件解决问题:
${DEVROOT}/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a
Run Code Online (Sandbox Code Playgroud)
这需要您使用最新的编译器/ SDK进行编译.我在没有测试的情况下提交了这个答案,如果有效的话请提出请求,如果没有,请提出请求!