我正在使用iOS 4.0 SDK运行Xcode 3.2.3。我使用Base SDK = iphoneos4.0,Active SDK = iphoneos4.0,Deployment Target = 3.1.3和Architecture = standard(arm6 arm7)构建了我的应用程序。编译器= GCC 4.2。据我了解,这是为iOS 4和3 构建应用程序的正确方法。
该应用程序在运行iOS 4的设备上运行正常。但是当您尝试在装有iOS 3.1.3(iPod Touch 1G)的设备上运行时,它会在启动时崩溃:
dyld: Symbol not found: __NSConcreteStackBlock
Referenced from: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
Expected in: /usr/lib/libSystem.B.dylib
在我的main()函数被调用之前,它似乎是一个相当“低级”动态链接库的问题。我甚至尝试重新启动设备等,没有运气。这是崩溃日志的一部分:
Process: MyApp [60]
Path: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
Identifier: MyApp
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2010-07-22 17:16:17.942 -0400
OS Version: iPhone OS 3.1.3 (7E18)
Report Version: 104
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x00000001, 0xe7ffdefe
Crashed Thread: 0
Dyld Error Message:
Symbol not found: __NSConcreteStackBlock
Referenced from: /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
Expected in: /usr/lib/libSystem.B.dylib
Dyld Version: 149
Binary Images:
0x1000 - 0x80fff +MyApp armv6 <d5f0ff6f233b4b034c222c16438c88d9> /var/mobile/Applications/192B30ED-16AC-431E-B0E9-67C1F41FD5DA/MyApp.app/MyApp
0x2fe00000 - 0x2fe26fff dyld armv6 <544395a4b5546114b878d5131a84fd7f> /usr/lib/dyld
0x30410000 - 0x30536fff libSystem.B.dylib armv6 <0373fd64e915a17160732b29d343f95f> /usr/lib/libSystem.B.dylib
感谢您的任何建议!
答案 0 :(得分:85)
Ben Gottlieb昨天指出,如果你在应用程序的任何地方使用块,你会在使用LLVM编译器构建时在4.0之前的操作系统上看到与此类似的崩溃。要解决此问题,您可以在Xcode构建设置中指定链接器标志-weak-lSystem
。
答案 1 :(得分:18)
由于大多数答案都是针对Xcode 3.x的,所以我只想分享我用Xcode 4.2解决的问题。
在“Link Binary With Libraries”部分的“Build Phases”选项卡中的目标下,我添加了“libSystem.dylib”并使其成为可选项。这解决了iOS 3.x设备问题,同时保持对iOS 4.x和5.0设备的支持。
答案 2 :(得分:1)
如果您碰巧使用cocos2d库,有一种更简洁的方法,您应该将cocos2d目标的部署目标配置为3.0