1. ホーム
  2. android

[解決済み] Android NDK C++ JNI (ネイティブの実装は見つかりませんでした。)

2023-02-19 20:57:42

質問

C++でNDKを使おうとしていますが、メソッドの命名規則を正しく理解することができません。

extern "C" {
JNIEXPORT void JNICALL Java_com_test_jnitest_SurfaceRenderer_drawFromJni
(JNIEnv* env, jclass c)
{
   //
}
}

のように extern "C" {} でラップされたヘッダを持つようにします。

すべてがうまくコンパイルされ、.so ファイルが作成され、プロジェクト下の libs フォルダにコピーされますが、Eclipse でデバッグして実行すると、" no implementation found for native... " というログ猫メッセージが出続けます。NDKのサンプルはすべてC言語なので、私が見逃しているものがあるのでしょうか?

ありがとうございます。

どのように解決するのですか?

実装が見つかりません("no implementation found")」となる可能性があるものがいくつかあります。 1 つは、関数プロトタイプ名の間違い、もう 1 つは .so をまったく読み込まないことです。 本当に System.loadLibrary() がメソッドが使用される前に呼び出されていることは確かですか?

もしあなたが JNI_OnLoad 関数が定義されていない場合、それを作成し、 lib が正常に取り込まれたことを確認するために、ログメッセージを吐き出させることができます。

あなたはすでに最も一般的な問題、すなわち extern "C" -- の使い忘れという最も一般的な問題を既に回避しているので、上記の問題か、あるいはちょっとしたスペルミスのどちらかでしょう。 Java の宣言はどのようなものでしょうか?