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