当我尝试在iOS 4.3模拟器(Xcode 4.2)中运行我的应用程序时,当我点击@autoreleasepool {}时,我崩溃了:
dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush
我环顾四周,看到解决方法是添加libarclite_iphoneos.a
。这个模拟器的版本也是libarclite_iphonesimulator.a
。
我需要将两个库添加到我的项目中,以使其在模拟器和硬件上运行。但无论我构建哪个,它都会抱怨另一个库是针对不受支持的架构的。
例如,为模拟器构建:
ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture
i386 in file
如何同时修复这两个问题?或者我现在应该坚持使用旧的NSAutoreleasePool
语法吗?
答案 0 :(得分:10)
在干净,干净的文件夹,重置iPhone模拟器甚至重启等试验后,我将目标版本设置中的IPHONE_DEPLYMENT_TARGET从iOS 5.0更改为iOS 4.2。 工作
答案 1 :(得分:1)
您可以使用其他链接器标志构建设置链接到库中,并根据它是“任何iOS”还是“任何iOS模拟器”来专门化该值。
答案 2 :(得分:0)
您还可以将两个静态库合并到一个通用库中。去终点站说
lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a
您可以通过说(在终端中)
来验证生成的文件file /where/you/put/it/libarclite_universal.a
应输出:
libarclite_universal.a: Mach-O universal binary with 3 architectures
libarclite_universal.a (for architecture i386):current ar archive random library
libarclite_universal.a (for architecture armv6):current ar archive random library
libarclite_universal.a (for architecture armv7):current ar archive random library
由于此lib是静态链接的,因此您的最终应用程序将不会增长,因为只有您的应用程序所需的内容才会链接到您的最终应用程序。