std ::线程在Android JNI中引起sigabrt
std::thread causes SIGABRT in android JNI
我正在尝试从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!)
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- OpenCV Android C++ imwrite not found
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- Android Studio 中带有静态库的原生C++代码
- 如何在 Android Studio 4 中编译 C/C++ 原生代码
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Android 在编译二进制文件时重建静态库
- 我只想在Android 4.4中使用C++11库
- 无法将标准库导入本机 android 项目中的头文件
- Android Java USB for native cpp
- 来自 Android 应用程序内部的 boost 类型的 boost::wrapexcept<boost::system::system_error> 的未捕获异常
- Android Studio:如何在build.gradle中定义自定义宏(针对不同的构建变体),并让原生C / C++
- 在Android原生C++中使用Facemark opencv contrib
- 中止信号来自 C++ 中的中止(3) (SIGABRT)
- 最小的CMake构建为Android
- std ::线程在Android JNI中引起sigabrt