std :: thread在android JNI中导致SIGABRT

时间:2016-12-15 06:51:17

标签: android c++ multithreading

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

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
}

Application.mk:

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

我在主UI线程中调用了Activity中的init方法。从后台主题来看,它也没有工作。

1 个答案:

答案 0 :(得分:1)

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

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

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

一些链接:

希望有所帮助......(我花了很多时间,doh!)