10

当我尝试在 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现在应该坚持使用旧语法?

4

3 回答 3

10

经过清理、清理文件夹、重置 iPhone 模拟器甚至重新启动等试验后,我将目标构建设置上的 IPHONE_DEPLYMENT_TARGET 从 iOS 5.0 更改为 iOS 4.2。工作。

于 2011-12-25T23:54:12.497 回答
1

您可以使用 Other Linker Flags 构建设置在库中进行链接,并根据它是“Any iOS”还是“Any iOS Simulator”来专门设置该值。

于 2011-10-17T19:32:21.140 回答
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

由于此库是静态链接的,因此您的最终应用程序不会因为包含的 sim 库而增长,因为只有您的应用程序需要的任何内容才会链接到您的最终应用程序中。

于 2011-11-16T14:17:54.593 回答