-1

Android NDK で、次のコマンドを使用して jni ヘッダーを生成しました。

C:\eclipse_workspace\C_Google_FaceDetect\bin>javah -jni -verbose -classpath C:\Android_SDK\platforms\android-10;C:\eclipse_workspace\C_Google_FaceDetect\src;. -d C:\eclipse_workspace\C_Google_FaceDetect\jni c.google.facedetect.FaceDetect

問題は、すべてを適切に設定しても、次のエラーが発生することです

ネイティブの Lc/google/facedetect/FaceDetect;.decodeYUV([I[BII)V の実装が見つかりません

threadid=1: キャッチされない例外で終了するスレッド (group=0x40018578)

致命的な例外: main java.lang.UnsatisfiedLinkError: decodeYUV

何が問題なのか探してみたところ、c_google_facedetect_FaceDetect.h jni ヘッダー ファイルで、実際には構文エラーが発生していることがわかりました (生成されているにもかかわらず)。

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h> /* Header for class c_google_facedetect_FaceDetect */

#ifndef _Included_c_google_facedetect_FaceDetect
#define _Included_c_google_facedetect_FaceDetect
#ifdef __cplusplus extern "C" {
#endif
#undef c_google_facedetect_FaceDetect_CAMERA_WIDTH
#define c_google_facedetect_FaceDetect_CAMERA_WIDTH 480L
#undef c_google_facedetect_FaceDetect_CAMERA_HEIGHT
#define c_google_facedetect_FaceDetect_CAMERA_HEIGHT 320L
/*
* Class:     c_google_facedetect_FaceDetect
* Method:    decodeYUV
* Signature: ([I[BII)V
*/

JNIEXPORT void JNICALL Java_c_google_facedetect_FaceDetect_decodeYUV(JNIEnv *, jobject, jintArray, jbyteArray, jint, jint);

#ifdef __cplusplus }
#endif
#endif

「JNIEXPORT void JNICALL ....」行に構文エラーがあります。おそらくそれがすべてのエラーの原因ですか?

私の Android.mk ファイルは次のとおりです。

LOCAL_PATH := $(my-dir を呼び出す)

$(CLEAR_VARS) を含める

LOCAL_MODULE := 顔検出

LOCAL_SRC_FILES := 顔検出.c

$(BUILD_SHARED_LIBRARY) を含める

UPDATE 私の唯一のJavaファイルはFaceDetect.javaと呼ばれ、次のコードが含まれています

public class FaceDetect extends Activity implements SurfaceHolder.Callback, Camera.PreviewCallback
{
static
    {
        Log.d("mytag", "before_lib");
        System.loadLibrary("face-detect");
        Log.d("mytag", "after_lib");
    }
public static native void decodeYUV(int[] out, byte[] fg, int width, int height);
}

また、Eclipse は構文エラーの内容を表示しません。JNIExport 行に下線を引くだけで、構文エラーと表示されます。

ライブラリがロードされていることを実際に確認した質問に答える別のUPDATE 、ここにlogcatがあります

07-16 13:31:43.257: D/mytag(25188): before_lib
07-16 13:31:43.281: D/dalvikvm(25188): lib /data/data/c.google.facedetect/lib/ を読み込もうとしていますlibface-detect.so 0x40517808
07-16 13:31:43.281: D/dalvikvm(25188): 共有ライブラリを追加しました /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13:31 :43.281: D/dalvikvm(25188): JNI_OnLoad が /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808 に見つかりません。init
07-16 13:31:43.281 をスキップします: D/mytag(25188 ): after_lib

4

1 に答える 1

2

構文エラーはありません。ネイティブ ライブラリを読み込んでいること、およびそれが正常に読み込まれたことを確認してください。

于 2012-07-16T12:44:12.760 に答える