2011-10-17 43 views
10

当我尝试运行我在的iOS 4.3模拟器(4.2的Xcode)应用程序,我崩溃的时候,我打@autoreleasepool {},有:有条件连接的@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

似乎是铛问题,因为在建的设置改变编译器LLVM-GCC-4.2解决了该问题对我来说 –

+0

我认为它修复了自;我几个月没有遇到过它。 –

回答

10

喜欢干净,整洁文件夹中的试验后,复位iPhone模拟器,甚至重新启动,我改变了IPHONE_DEPLYMENT_TARGET目标构建从iOS的5.0放下至iOS 4.2。 工作。

+0

我会重新测试,也许它已被修复。谢谢。 –

+0

@amosel:你使用的是哪个xcode版本? 4.2。或4.2.1? –

+0

@JohannesRudolph我使用4.2生成4D199 – amosel

1

可以使用其它链接器标记构建设置在链接到该库,并专门基于它是否是“任何iOS版”或“任何iPhone模拟器”的值。

+0

这看起来应该可以工作。我在做这个工作。 :) –

+1

@StevenFisher:我很神秘,为什么这是必要的。当您的部署目标设置在5.0之前时,Clang应该在适当的库中为您链接。 –

+0

好点。我做了一些进一步的测试。它看起来只是在编译模拟器时出现问题。编译器件时,它会自动包含器件。我不得不添加'$ {} PLATFORM_DEVELOPER_USR_DIR/lib中/ arc'为'LIBRARY_SEARCH_PATHS'和'-larclite_iphonesimulator'到'OTHER_LDFLAGS [SDK = iphonesimulator *] [ARCH = *]',但有没有必要做了一个设定iOS硬件。所以这几乎肯定是一个错误。 –

0

您也可以合并两个静态库到一个通用库。转到终端,并说,说(在终端中)

file /where/you/put/it/libarclite_universal.a 

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 

可以验证生成的文件它应该输出:

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静态链接,您的最终应用程序不会因为包含的SIM卡库而增长,因为只有您的应用程序需要的任何内容才会链接到您的最终应用程序中。