C++ で Java ネイティブ ライブラリを作成し、ネイティブ ライブラリ内で例外処理を使用していますが、例外をスローするとすぐにライブラリがクラッシュします。これが私の簡単なテスト プログラムです。Java テストから呼び出すと、例外がスローされるとすぐにクラッシュします。catch ブロックが機能していません。私が見逃しているアイデア。ありがとう。
#include "Test.h"
#include <iostream>
JNIEXPORT void JNICALL Java_Test_helloWorld(JNIEnv *, jobject)
{
std::cout<<"Hello World";
try {
throw 1;
}
catch(int )
{
std::cout<<" catch int block"<<std::endl;
}
catch(...)
{
std::cout<<" catch block"<<std::endl;
}
}
コンパイルとリンク:
g++ -m64 -fPIC -fexceptions -c test.cpp
g++ -shared -m64 -Wl,-soname,libtest.so -Wl,-shared-libgcc test.o -o libtest.so
$ java -d64 -Djava.library.path=/home/vkumar/projects/test -cp $CLASSPATH Test
terminate called after throwing an instance of 'int'
terminate called recursively
Hello World^CAbort (core dumped)