++ 예외 : 그러나 모든안드로이드 NDK R5와 C의 지원을 나는 NDK 5 완전 C++ gnustl 사용하는 것을 시도하고있다
이NDK 툴 체인은 NDK R5 때문에, C++ 예외를 지원합니다
CPLUSPLUS-SUPPORT.html
상태를 C++ 소스는 이전 릴리스와의 호환성 이유로 에 대해 기본적으로 -fno-exceptions 지원으로 컴파일됩니다.활성화하려면 '-fexceptions'C++ 컴파일러 플래그를 사용하십시오. 이것은 당신의 Android.mk의 모든 모듈 정의에 다음을 추가하여 을 수행 할 수 있습니다
LOCAL_CPPFLAGS += -fexceptions
더 간단하게, 당신의 Application.mk에 한 줄을 추가을 설정이 는 자동으로 모든 프로젝트의 NDK에 적용됩니다 모듈 :
APP_CPPFLAGS += -fexceptions
sources/cxx-stl/gnu-libstdc++/README
상태 :
이 디렉토리의 공동 GNU libstdC++ - v3 C++ 표준 템플릿 라이브러리 구현을위한 헤더와 사전 빌드 된 바이너리를 포함합니다.
빌드/도구 아래의 rebuild-all-prebuilt.sh 스크립트에 의해 도구 체인 소스에서 생성됩니다.
사용하려면 Application.mk에서 APP_STL을 'gnustl_static'로 정의하십시오. 자세한 내용은 docs/CPLUSPLUS-SUPPORT.html을 참조하십시오.
이 구현은 C++ 예외 및 RTTI를 완전히 지원합니다.
그러나 예외를 사용하는 모든 시도는 실패합니다. 대체 NDK가 http://www.crystax.net/android/ndk-r4.php에 있습니다. 해당 NDK의 hello-jni 예제를 사용하면 작동하지 않습니다.
APP_STL := gnustl_static
이 gnustl_static
에 APP_STL 설정을 가진 Application.xml
을 만든 후 NDK 5 개 작품과 함께 컴파일시는 자동으로 -frtti
와 -fexceptions
수 있습니다. 그러나 그것은 내 자신의 실험과 같은 끔찍한 죽음으로 죽는다.
나를 위해 충돌되는 코드의 최소한의 예를 얻는 것을 처리했다 :
try {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","trhown!");
throw "Wrong object type.";
} catch (char* b) {
__android_log_write(ANDROID_LOG_DEBUG,"foobar","catched!");
}
오전 내가 놓친 거지 뭔가를하거나 README
및 CPLUSPLUS-SUPPORT.html
그냥 일반 잘못의 문은 무엇입니까?
아마도 그것이 미래 NDK의 릴리스에서 수정 될 수
... 그래서 그것의 도움을 하드; 예외, RTTI 및 static_gnustl은 NDK-r5에서 작동합니다. – grrussel
충돌이 발생한 예제를 추가했습니다. – plaisthos
인수 V = 1을 사용하여 ndk_build 명령을 호출하면 빌드 및 링크 명령이 표시됩니다. 충돌이 예외로 인한 것인지 확실합니까? – grrussel