C++에서 Java 메소드를 호출하려고합니다.Android ndk 치명적인 신호 코드 = 1
C++
JNIEXPORT void JNICALL Java_ru_sploid_platerecog_RecogActivity_FindFeatures(JNIEnv* env, jobject job, jlong addr_rgba)
{
Mat& m_rgba = *(Mat*)addr_rgba;
try
{
const pair< string, int > fn = read_number(m_rgba, 10);
jclass clazz = env->FindClass("ru/sploid/platerecog/RecogActivity");
jmethodID meth=env->GetMethodID(clazz,"onGetNumber","(Ljava/lang/String;)V");
env->CallVoidMethod(job,meth,fn.first.data());
// cv::putText(m_rgba, fn.first.empty() ? string("not found") : fn.first, cv::Point(20, 100), CV_FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 0, 0, 0));
}
catch (const std::exception& e)
{
cout << "Catch exception: " << e.what() << endl;
cv::putText(m_rgba, "Exception", cv::Point(20, 100), CV_FONT_HERSHEY_PLAIN, 2.0, cv::Scalar(255, 0, 0, 0));
}
}
자바 : 나는 C++에 오류가 있다고 생각 03-12 23:33:29.172: A/libc(21987): Fatal signal 11 (SIGSEGV) at 0x323030b9 (code=1)
와
public void onGetNumber(String plate){
plat=plate;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (plat!=null)
Toast.makeText(getApplicationContext(), plat, Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "((", Toast.LENGTH_LONG).show();
}
});
}
그리고 응용 프로그램이 닫힙니다. 고마워요
전체 스택 추적 또는 적어도 그 이상을 게시하십시오. –
@ChrisStratton 더 이상 흥미롭지 않습니다. 오직 간단한 openCV 메시지 – Artem
그런 다음 예외 추적기가 스택 추적을받지 못하게하는 것을 찾아서 사용하지 않도록 설정하십시오. 또는 ndk-gdb에서 실행하십시오. 또는 네이티브 코드에 로깅을 넣으십시오. 그러나 ** 사람들에게 ** 오류 위치를 추측하는 것은 합리적이지 않습니다. –