-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:线程以未捕获的异常退出(组=0x40018578)

致命异常:主要 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 := $(调用我的目录)

包括 $(CLEAR_VARS)

LOCAL_MODULE := 人脸检测

LOCAL_SRC_FILES := face-detect.c

包括 $(BUILD_SHARED_LIBRARY)

更新 我的唯一一个 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 行下划线并说语法错误

另一个更新来回答 我确实检查过库正在加载的问题,这里是 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): 在 /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808 中找不到 JNI_OnLoad,跳过初始化
07-16 13:31:43.281: D/mytag(25188 ): after_lib

4

1 回答 1

2

没有语法错误。检查您是否正在加载本机库并且已成功加载。

于 2012-07-16T12:44:12.760 回答