2012-07-16 61 views
-1

的Android NDK,我用下面的命令來生成JNI頭,JAVAH JNI生成的頭有語法錯誤 - 的Android NDK - 日食

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 

的問題是 即使我設置好一切,我收到以下錯誤

No implementation found for native Lc/google/facedetect/FaceDetect;.decodeYUV([I[BII)V

threadid=1:thread exiting with uncaught exception (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 := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := face-detect

LOCAL_SRC_FILES := face-detect.c

include $(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行並且表示語法錯誤

另一個更新回答 我確實檢查了該庫被加載的問題,這裏是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):添加共享lib /data/data/c.google.facedetect/lib/libface-detect.so 0x40517808
07-16 13:31:43.281:D/dalvikvm(25188):在/ data中找不到JNI_OnLoad /data/c.google.facedetect/lib/libface-detect.so 0x40517808,跳過init
07-16 13:31:43.281 :D/mytag(25188):after_lib

+0

什麼語法錯誤? – EJP 2012-07-16 12:25:55

+0

Eclipse沒有提供任何更多的細節,它只是說該行的語法錯誤 – 2012-07-16 13:00:46

+0

Eclipse常常是錯誤的。它不喜歡C代碼,如果它沒有指向一整套頭文件,並且最新的ADT版本很多時候只是*隨機*錯誤/陳舊的Java代碼。看看你是否可以禁用檢查,或切斷它的抱怨,保存和清理,然後將其粘貼回來。 – 2012-07-16 13:04:29

回答

1

沒有語法錯誤。檢查你是否正在加載你的本地庫,並且它已經成功加載。

+0

感謝您的回覆。在評論中編寫代碼有點粗糙,我更新了問題,如果你可以請看看。謝謝。 – 2012-07-16 13:01:35

+0

我已檢查該庫是否正在加載並更新問題以包含代碼和logcat:D – 2012-07-16 13:09:00

+0

實現JNI_OnLoad並在其中執行一些可觀察的事情,以100%確定您的lib已正確添加。同時轉儲由libface-detect.so導出的符號並將其發佈到此處。 – 2012-07-16 13:56:13