2013-07-23 104 views
1

我想建立使用android NDK的sqlite使用sqlite3_create_function,但我得到無規則,使目標錯誤。 make: *** No rule to make target '/fts3-rank.c', needed by '.../obj/local/armeabi/objs/fts3-rank//fts3-rank.o'. Stop.這Android.mk文件是基於關閉本網站之一:http://www.roman10.net/how-to-compile-sqlite-for-android-using-ndk/沒有規則,使目標錯誤android ndk構建sqlite

#LOCAL_PATH is used to locate source files in the development tree. 

    #the macro my-dir provided by the build system, indicates the path of the current directory 

    LOCAL_PATH := $(call my_dir) 




    ##################################################################### 

    #   build sqlite3           # 

    ##################################################################### 

    include $(CLEAR_VARS) 

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-amalgamation-3071700 

    LOCAL_MODULE := sqlite3 

    LOCAL_SRC_FILES := $(LOCAL_PATH)/sqlite-amalgamation-3071700/sqlite3.c 

    include $(BUILD_STATIC_LIBRARY) 

    #include $(BUILD_SHARED_LIBRARY) 





    ##################################################################### 

    #   build our code     # 

    ##################################################################### 

    include $(CLEAR_VARS) 

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-amalgamation-3071700 

    LOCAL_MODULE := fts3-rank 

    LOCAL_SRC_FILES := fts3-rank.c 

    LOCAL_STATIC_LIBRARIES := libsqlite3 

    #LOCAL_SHARED_LIBRARIES:=libsqlite3 

    LOCAL_LDLIBS := -llog -lm 

    #include $(BUILD_SHARED_LIBRARY) 

    include $(BUILD_EXECUTABLE) 
+0

這很可能是通過匹配使規則圖案的組合和雙斜線的存在導致('... // fts3- rank.o');或者,'/ fts3-rank.c'可能缺少一個前綴(如果未定義「SRC」,'$(SRC)/ fts3-rank.c'就會變成'/ fts3-rank.c'。 – technomage

+0

我只是越來越'make:***沒有規則制定目標'/fts3-rank.c','obj/local/armeabi/objs/fts3-rank/fts3-rank.o'需要。 Stop.'現在仍然無法弄清楚......我試着添加$(LOCAL_PATH)並將fts3-rank.c添加到sqlite合併中,但仍然沒有任何結果。 – John61590

+0

使用'-d'運行'make'',然後查找包含'/ fts3-rank.c'的行。找到規則後,查看前面的輸出行以確定規則的定義位置;然後查看該makefile以查看原始規則,該規則應該明確哪些宏缺少定義。 – technomage

回答

1

可能有一些不同的原因,此錯誤的。

  1. 它可能是LOCAL_PATH值不正確所以檢查LOCAL_PATH初始化。刪除任何額外的空間。 LOCAL_PATH := $(call my-dir)__

  2. 你的jni庫應該在調用任何jni函數之前加載到內存中。加載jni庫如下。

    靜態{

    System.loadLibrary("libmy-jni-module"); 
    

    }

你可以參考上this討論,讓

+0

我試過System.loadLibrary,它沒有修復它。以下是我如何設置文件系統:project/jni是我所有文件(Android.mk,sqlite-amalgamation文件夾和fts3-rank.c)的地方。我嘗試從項目文件夾和jni運行,但沒有去。在LOCAL_PATH之後我沒有多餘的空格。 – John61590

1

我的試驗和錯誤修復它不知何故。這很奇怪。我想這是因爲我使用了LOCAL_PATH兩次?

我終於得到它使用該Android.mk建立

#LOCAL_PATH is used to locate source files in the development tree. 

#the macro my-dir provided by the build system, indicates the path of the current directory 

LOCAL_PATH := $(call my-dir) 




##################################################################### 

#   build sqlite3           # 

##################################################################### 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES := sqlite-amalgamation-3071700 

LOCAL_MODULE := sqlite3 

LOCAL_SRC_FILES := sqlite-amalgamation-3071700/sqlite3.c 

include $(BUILD_STATIC_LIBRARY) 

#include $(BUILD_SHARED_LIBRARY) 





##################################################################### 

#   build our code     # 

##################################################################### 

include $(CLEAR_VARS) 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/sqlite-amalgamation-3071700 

LOCAL_MODULE := fts3-rank 

LOCAL_SRC_FILES := fts3-rank.c 

LOCAL_STATIC_LIBRARIES := libsqlite3 

#LOCAL_SHARED_LIBRARIES:=libsqlite3 

LOCAL_LDLIBS := -llog -lm 

include $(BUILD_SHARED_LIBRARY) 

#need main function to have executable 

#include $(BUILD_EXECUTABLE) 
相關問題