2014-02-12 90 views
2

首先,我有一個JNIEXPORT方法是這樣的:調用從JNI方法NDK其他C++方法

JNIEXPORT void JNICALL Java_com_app_osap_Native_nativeProcessImage(JNIEnv *env, jobject thiz, jstring imagePath){ 
    // ... 
    handle(data); 
} 

然後我寫在同一個CPP文件的另一種方法:

void handle(int data[]){ 

} 

但我編譯源代碼時得到這個錯誤:

'handle' was not declared in this scope 

請告訴我我的問題是什麼以及我如何解決它。
提前致謝!

回答

2

由於您不使用頭文件,因此需要在JNI函數之前聲明句柄函數。或者,您可能會開始使用包含函數聲明的頭文件,然後將其包含在您的cpp文件中。像:

test.h:

void handle(int data[]); 

TEST.CPP

#include test.h 

不要忘了標題添加到您的模塊在你的Android.mk:

include $(CLEAR_VARS) 
LOCAL_MODULE := test 
LOCAL_SRC_FILES := path/to/test.cpp 
LOCAL_C_INCLUDES := path/to/test.h  #This is the header file you created 
include $(BUILD_SHARED_LIBRARY) 
+0

我建議創建和使用頭文件,這是其他人所期望的。 – 18446744073709551615

+0

@ 18446744073709551615雖然你是對的,但他看起來像是一個新手,我不想讓事情變得更加複雜。無論如何,我會編輯我的解決方案。 – eozgonul

+0

@ user2359247非常感謝,我試圖在JNI之前聲明句柄函數並且它工作。我會考慮頭文件的方法。既然我是ndk新手,所以有很多我不知道的東西。 – R4j