【问题标题】:iOS 4 app crashes at startup on 3.1.3: Symbol not found: __NSConcreteStackBlockiOS 4 应用程序在 3.1.3 启动时崩溃:找不到符号:__NSConcreteStackBlock
【发布时间】:2011-10-27 10:00:52
【问题描述】:

由于这个 NSConcreteBlock 错误,我的应用程序在 3.1.3 上崩溃了。我看了the other post on this topic,答案是弱链接libSystem.B.dylib。

但是,我根本没有在我的应用中包含那个库,而且我仍然遇到同样的错误。

还有什么可能导致此崩溃?

这是日志:

代码类型:ARM(本机) 父进程:launchd 1

日期/时间:2011-10-20 14:05:08.189 -0700 操作系统版本:iPhone OS 3.1.3 (7E18) 报告版本:104

异常类型:EXC_BREAKPOINT (SIGTRAP) 异常代码:0x00000001、0xe7ffdefe 崩溃的线程:0

Dyld 错误消息: 未找到符号:__NSConcreteStackBlock 预期在:/usr/lib/libSystem.B.dylib dyld 版本:149

【问题讨论】:

    标签: iphone objective-c cocoa-touch ipad


    【解决方案1】:

    但是,我根本没有在我的应用中包含那个库,而且我仍然遇到同样的错误。

    除了 libSystem 无法逃脱,因为它实现了标准 C 运行时库等。每当你编译一个 Objective-C 程序时,编译器会自动链接 libSystem。而且,如果您通过 otool -L 检查 UIKit 或 Foundation 等系统框架,您会发现它们也与 libSystem 相关联。

    这意味着 Bard Larson 在this answer 中描述的解决方案也应该适用于您。

    【讨论】:

      【解决方案2】:

      块是 iOS 4.0 中引入的 Objective-C 语言功能 - 它永远不会在 iOS 3.x 上工作。

      【讨论】:

        【解决方案3】:

        您可能已经看过这个,但仍然值得一试:http://longweekendmobile.com/2011/03/15/the-backwards-compatibility-blues-supporting-ios-3-1-4-2/

        他们说即使您在代码中不使用块,libSystem 也会引用它们,因此 libSystem 的弱链接也应该对您有用。

        【讨论】:

        • 我根本没有链接 libSystem 库。我应该链接它,然后弱链接它吗?如果你已经链接它,我以为你只是弱链接它 - 我错了吗?我会覆盖某种非显式链接吗?
        • @AndrewJohnson 似乎 libSystem.B.dylib 以某种方式自动链接,即使它没有被项目直接链接。你不需要链接它,你只需要使用-weak-lSystem标志。
        【解决方案4】:

        在构建设置下确保您的 C/C++ 编译器版本是 LLVM GCC 而不是 GCC。

        【讨论】:

          【解决方案5】:

          您可能没有使用任何基于块的方法,但您可能正在使用一些正在使用一些 UIKit 方法的方法,这些方法现在在内部使用基于块的方法。您可能需要检查以下内容:

          1. 检查构建设置中的部署目标是否设置为 3.1.3。
          2. 您是否可能使用来自 iOS4 或 5 的任何新方法或更新方法?即现在可以在幕后调用/执行块的方法

          正如其他人所说,作为最后的手段,也许您可​​以弱链接 libSystem 库。

          祝你好运

          【讨论】:

            猜你喜欢
            • 2011-03-19
            • 1970-01-01
            • 2018-12-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多