【问题标题】:No rule to make target error android ndk build sqlite没有规则使目标错误android ndk build sqlite
【发布时间】:2013-07-23 13:07:34
【问题描述】:

我正在尝试使用 android NDK 构建 sqlite 以使用 sqlite3_create_function,但我得到 No rule to make target 错误。 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/

    #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)

【问题讨论】:

  • 这可能是由模式匹配 make 规则和双斜杠 (...//fts3-rank.o) 的组合引起的;或者,/fts3-rank.c 可能缺少前缀(如果未定义 SRC,则 $(SRC)/fts3-rank.c 之类的东西将变成 /fts3-rank.c)。
  • 我现在才收到make: *** No rule to make target '/fts3-rank.c', needed by 'obj/local/armeabi/objs/fts3-rank/fts3-rank.o'. Stop.,但仍然无法弄清楚...我尝试添加 $(LOCAL_PATH) 并将 fts3-rank.c 添加到 sqlite 合并中,但仍然没有.
  • 运行 'make' 和 '-d',然后查找包含 '/fts3-rank.c' 的行。找到规则后,查看前面的输出行以确定规则的定义位置;然后查看该 makefile 以查看原始规则,该规则应该清楚地表明缺少定义的宏。

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


【解决方案1】:

这个错误可能有一些不同的原因。

  1. 可能是LOCAL_PATH 值不正确,因此请检查 LOCAL_PATH 初始化。删除其中的任何多余空格。 LOCAL_PATH := $(call my-dir)__

  2. 您的 jni 库应该在调用任何 jni 函数之前加载到内存中。如下加载 jni 库。

    静态{

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

    }

你可以参考this关于so的讨论

【讨论】:

  • 我尝试了 System.loadLibrary 并没有修复它。以下是我设置文件系统的方式:project/jni 是我所有文件所在的位置(Android.mk、sqlite-amalgamation 文件夹和 fts3-rank.c)。我尝试从项目文件夹和 jni 运行,但不行。在 LOCAL_PATH 之后我也没有多余的空格。
【解决方案2】:

我通过反复试验以某种方式修复了它。这很奇怪。我猜是因为我使用了 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    相关资源
    最近更新 更多