javah jni生成的头文件有语法错误--Android NDK - eclipse

时间:2012-07-16 12:17:35

标签: android java-native-interface native android-ndk

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)

     

FATAL EXCEPTION: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:= face-detect

     

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

1 个答案:

答案 0 :(得分:1)

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