【问题标题】:Android NDK - C++ Exceptions cause crash with 3rd party native libraryAndroid NDK - C++ 异常导致第 3 方本机库崩溃
【发布时间】:2019-12-04 20:24:39
【问题描述】:

我正在创建的依赖于另一个 3rd 方库的 android 本机库存在问题。

我正在使用专有的 Android POS 终端(Android Lollipop API 22)。它带有一个专有的本机库“.so”,我用我自己的本机代码包装该库,该代码将从 Android Java 调用。

我遇到的问题是,当我的代码抛出本地库中捕获的 c++ 异常(也就是说,我没有向 java 抛出异常)时,应用程序在 throw 语句处因 SIGSEGV 致命错误而崩溃。

如果我将第 3 方本机库从链接中取出,我可以随心所欲地抛出和捕获异常。添加回“.so”库,任何抛出都会导致崩溃。

知道如何解决或解决问题吗?

【问题讨论】:

  • C++ 异常展开堆栈。如果异常试图展开非 C++ 框架,并且该非 C++ 框架与您的特定 C++ 编译器的堆栈展开方式不兼容,那么 SIGSEGV 就不足为奇了。

标签: android c++ exception android-ndk segmentation-fault


【解决方案1】:

我可能会迟到,但我最近遇到了同样性质的崩溃。 就我而言,clang 似乎知道编译库的问题,这些库在引发“本机”异常的事件中崩溃。我已经升级了我的工具链,所以现在它通过当前最新的“android-ndk-r21”进行了交叉编译。 那是为我做的。

【讨论】:

    【解决方案2】:

    事实证明,问题出在第三方库上。如果原生库是在没有异常的情况下构建的,那么调用该库的代码也不能使用异常。

    非常沮丧。

    【讨论】:

      猜你喜欢
      • 2012-05-08
      • 2018-09-27
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多