一个在Xcode4.1+iOS4 SDK环境下能够正常编译、运行、模拟器、真机调试运行的项目,在升级到Xcode4.2+iOS5 SDK后不能在模拟器上运行,启动程序后直接抛异常(好像是个EXC_BAD_ACCESS之类的内存访问违规,但在真机调试时并没有问题,且真机也是iOS5系统!),而此时的中断位置甚至尚未到达入口main,类似下图的stack trace:
从调用栈可以看出,异常发生在尚未进入程序入口的地方,也就是系统初始化某些程序需要用到的东西的地方,因此,应该和程序本身代码没有什么直接的关系。
开始以为是deployment target的问题,本来为了最大兼容性考虑,现在的target是SDK能够设置的最低的3.0,改过几个高版本,直到4.3,发现崩溃依旧,其实想想也不能因为这个问题把target钳制在某个版本吧,毕竟选项里还是有低版本的,那就证明可以支持。
最后发现网上有人提到一些如弱引用库相关的东西只有在iOS4.3以上才能支持,这才依稀记起当时好像是由于植入OpenFeint的需要,根据官方的引导,进行了针对低版本系统的弱引用libSystem.B.dylib的处理,找到项目Build设置中的Other Linker Flags里,去掉-weak_library /usr/lib/libSystem.B.dylib后问题解决。
博主友情提示:
如您在评论中需要提及如QQ号、电子邮件地址或其他隐私敏感信息,欢迎使用>>博主专用加密工具v3<<处理后发布,原文只有博主可以看到。