2016-12-15 3 views
1

std:threadjni에서 android으로 간단하게 만들려고합니다. 하지만 내 응용 프로그램이 충돌하고 다음 오류가 발생합니다.std :: thread가 android JNI에서 SIGABRT를 발생시킵니다.

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 방법을했다. 배경 스레드에서 그것은 작동하지 않았다.

답변

1

글쎄, clang의 "잘 알려진, 공개되지 않은"버그 인 것 같습니다. 현재 NDK 버전 (글 쓰는 시점에서는 r10d)에서 아직 수정되지 않았습니다.

대신 g ++를 사용하여 솔루션이 컴파일 된 것처럼 보입니다. 이렇게하려면 단순히 Gradle을 스크립트에 다음 행을 추가

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

일부 링크 :

희망하는 데 도움이 ... (I 지출 그것에 많은 시간, doh!)

관련 문제