android - std::thread 在 android JNI 中导致 SIGABRT

标签 android c++ multithreading

我正在尝试从 android 中的 jni 创建一个简单的 std:thread。但是我的应用程序因以下错误而崩溃。

A/libc: Fatal signal 6 (SIGABRT) at 0x00005606 (code=-6), thread 22059

JNI 源代码:

void threadRun(){
    sleep(5);
}

JNIEXPORT void JNICALL Java_com_helloworld_JNIWrapper_init
  (JNIEnv *env, jobject obj)
{
     thread th(threadRun);
     th.join(); //or th.detach() doesn't work either
}

应用程序.mk:

APP_STL := gnustl_static
APP_CPPFLAGS += -std=c++11

我从主 UI 线程中的 Activity 调用了 init 方法。从后台线程它也不起作用。

最佳答案

好吧,它似乎是 clang 中的一个“众所周知的,未公开的”错误,尚未在当前的 NDK 版本中修复(在撰写本文时,对我来说是 r10d)。

该解决方案似乎改为使用 g++ 进行编译。为此,只需将以下几行添加到您的 gradle 脚本中:

externalNativeBuild {
    cmake {
            arguments "-DANDROID_TOOLCHAIN=gcc"
    }
}

一些链接:

希望能有所帮助...(我花了很多时间在这上面,doh!)

关于android - std::thread 在 android JNI 中导致 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41158084/

相关文章:

android - onCreate 在实现 setRequestedOrientation 后被调用了两次

c++ - 单数1 -15的打印品

c++ - 赋值运算符的分支与值而不是引用

c++ - 将 export 关键字与模板一起使用

java线程同步失败

android - 更改 NumberPicker 的文本颜色

android - 设计器布局在自定义对话框中未正确显示

java - 使用 for(boolean haveNext = false;;) 而不是 while(cond)

android - 是否会为新用户运行房间迁移?

c# - 如何使事件处理程序异步运行?