std ::线程在Android JNI中引起sigabrt

std::thread causes SIGABRT in android JNI

本文关键字:sigabrt Android 线程 std JNI      更新时间:2023-10-16

我正在尝试从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
}

application.mk:

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

我从主UI线程中的活动中调用init方法。从背景线程也无法工作。

好吧,看来这是clang中的"众所周知,未公开"的错误,尚未在当前NDK版本中固定(在写作时,对我来说R10D)。P>

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

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

一些链接:

  • https://bugs.llvm.org//show_bug.cgi?id=23428
  • https://github.com/olehkulykov/fayecpp/issues/2

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