iPhone-iOS 4应用程序在iOS 3.1.3上启动时崩溃:找不到符号:__NSConcreteStackB

我正在使用iOS 4.0 SDK运行Xcode 3.2.3。 我使用基本SDK = iphoneos4.0,活动SDK = iphoneos4.0,部署目标= 3.1.3和体系结构=标准(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

感谢您的任何建议!

Clint Harris asked 2020-06-27T20:35:26Z
3个解决方案
85 votes

Ben Gottlieb昨天指出,如果在应用程序中的任何地方使用块,则在使用LLVM编译器进行编译时,会在4.0之前的操作系统上看到类似的崩溃。 要解决此问题,可以在Xcode构建设置中指定链接器标记-weak-lSystem

Brad Larson answered 2020-06-27T20:35:40Z
18 votes

由于这些答案大多数都是针对Xcode 3.x的,因此只想分享我为Xcode 4.2修复此问题所做的工作。

在“使用库链接二进制文件”部分的“构建阶段”选项卡中的目标下,添加了“ libSystem.dylib”并将其设置为可选。 这解决了iOS 3.x设备问题,同时保持了对iOS 4.x和5.0设备的支持。

Brandon answered 2020-06-27T20:36:05Z
1 votes

如果您碰巧正在使用cocos2d库,则可以使用一种更简洁的方法,将cocos2d目标的Deployment目标配置为3.0

Rafael Nobre answered 2020-06-27T20:36:25Z
translate from https://stackoverflow.com:/questions/3313786/ios-4-app-crashes-at-startup-on-ios-3-1-3-symbol-not-found-nsconcretestackbl