2012-08-06 83 views
0

我是Android新手,正在嘗試創建一個簡單的SDK + NDK概念。我跟着下面的步驟:Android:生成.so文件時出錯

  1. 下載NDK
  2. 提取zip文件
  3. 創建新的Android項目。
  4. 在項目下創建新文件夾jni。
  5. 根據需要定義UI。
  6. 創建一個java文件來調用所有的本地方法。用「本機」前綴聲明所有這些方法。使用system.loadLibrary("")有靜態塊加載庫。
  7. 使用javah -jni filename
  8. 創建相應的頭文件將生成的filename.h文件移至jni文件夾。
  9. 編寫包含.h文件的c文件,並在.h文件中實現這些方法並保存它。
  10. 創建MK文件,具有下列內容:

    LOCAL_PATH:= $(叫我-DIR)
    包括$(CLEAR_VARS)
    LOCAL_MODULE:=
    LOCAL_SRC_FILES:= .C
    包括$( BUILD_SHARED_LIBRARY)

  11. 轉到命令提示符項目文件夾
  12. <ndkfolder>/ndk-build
  13. .so文件,將產生

但我被困在「12」點,出現以下錯誤:

**"Compile thumb : com_cts_c2dmclient_NativeLib <= com_cts_c2dmclient_NativeLib.c 
jni/com_cts_c2dmclient_NativeLib.c:3:40: fatal error: com_cts_c2dmclient_NativeL 
ib: No such file or directory 
compilation terminated. 
make: *** [obj/local/armeabi/objs/com_cts_c2dmclient_NativeLib/com_cts_c2dmclien 
t_NativeLib.o] Error 1** 

注:創建成功.h文件。

我com_exampleservice_NativeLib.c文件

#include "stdio.h" 
#include "malloc.h" 
#include <com_exampleservice_NativeLib.h> 

JNIEXPORT jint JNICALL Java_com_exampleservice_NativeLib_loop 
    (JNIEnv * env,jobject obj,jint v1, jint v2){ 
    int loop; 
    unsigned long int *array; 
if(v2 == 0){ 
    array = (unsigned long int *)malloc(v1 * sizeof(unsigned long int));} 
else if(v2 == 1) 
{ 
array = realloc(array,sizeof(array)+v1); 
} 
else{ 
} 
    array[0] = 1; 
    array[1] = 1; 
    for (loop = 2; loop < v1; loop++) { 
     array[loop] = array[loop - 1] + array[loop - 2]; 
    } 
    for (loop = 0; loop < v1; loop++) { 
    } 
if(v2 == 2) 
{ 
free(array); 
} 
return 0; 
} 
+0

放入您的Native-C文件。 – Dharmendra 2012-08-06 13:37:45

+0

我添加了我的c文件 – Sudarshan 2012-08-06 13:40:22

+0

你能告訴我你的包名和你正在加載這個lib的類的名字嗎? – Dharmendra 2012-08-06 13:44:03

回答

0

Android.mk文件不好看你的問題。

確保com_exampleservice_NativeLib.h文件存在於您的c文件附近的jni目錄中。

這可能是必要的目錄添加到包括路徑,像

LOCAL_C_INCLUDES += $(LOCAL_PATH)/include 

注意這$(LOCAL_C_INCLUDES)必須是絕對路徑列表,而不是像$(LOCAL_SRC_FILES)這是$(LOCAL_PATH)基。

另一個需要注意的是在你的com_exampleservice_NativeLib.c文件中使用#include指令或名稱是不正確的。它應該去

#include <stdio.h> 
#include <malloc.h> 
#include "com_exampleservice_NativeLib.h" 

請參閱What is the difference between #include <filename> and #include "filename"?的詳細說明。

0

我剛剛被使用NDK的第1次爲好。

我用SWIG以避免編寫Java代碼JNI手動

我發現this教程有用: