没有制定目标 NDK 的规则

No rule to make target NDK(没有制定目标 NDK 的规则)
本文介绍了没有制定目标 NDK 的规则的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在编译原生源代码并使用 .a 库和具有以下结构的相关头文件添加依赖项.

/jni/

<块引用>

Android.mk

LOCAL_PATH := $(call my-dir)包括 $(调用所有子目录生成文件)包括 $(CLEAR_VARS)LOCAL_LDLIBS := -llog本地模块:= ndk1LOCAL_SRC_FILES := native.cLOCAL_STATIC_LIBRARY := mschema包括 $(BUILD_SHARED_LIBRARY)

<块引用>

native.c

/jni/prereqs/

<块引用>

Android.mk

LOCAL_PATH := $(call my-dir)包括 $(调用所有子目录生成文件)包括 $(CLEAR_VARS)

--用于调用子文件夹mk文件

/jni/prereqs/mschema/

<块引用>

Android.mk

LOCAL_PATH := $(call my-dir)包括 $(CLEAR_VARS)LOCAL_MODULE :=mschemaLOCAL_SRC_FILES :=libmschema.aLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include包括 $(PREBUILT_STATIC_LIBRARY)

<块引用>

libmschema.a

/jni/prereqs/mschema/include

<块引用>

头文件.(.h)

但在尝试 ndk-build (NDK5) 时出现以下错误.

marcos@marcos-AY675AA-AC4-s5320br:~/dev/workspace/rmsdk.native.wraper$ ndk-buildmake:*** 没有规则来制作目标 `/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c',需要 `/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/ndk1/native.o'.停止.

在打字时我注意到错误是关于 /home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c' 而实际上这个文件在/home/marcos/dev/workspace/rmsdk.native.wraper/jni/native.c',我的make文件有什么问题?

可以通过将第一个 Android.mk 更改为以下内容来避免该问题:

LOCAL_PATH := $(call my-dir)包括 $(调用所有子目录生成文件)LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni包括 $(CLEAR_VARS)LOCAL_LDLIBS := -llog本地模块:= ndk1LOCAL_SRC_FILES := native.cLOCAL_STATIC_LIBRARY := mschema包括 $(BUILD_SHARED_LIBRARY)

但它看起来不对.有更好的方法吗?

解决方案

从 NDK 5 的 Docs 中,解决方案是创建一个局部变量..

我的目录返回最后包含的 Makefile 的路径,通常是当前 Android.mk 的目录.这有助于定义LOCAL_PATH 在您的 Android.mk 开头,如下所示:

 LOCAL_PATH := $(call my-dir)重要提示:由于 GNU Make 的工作方式,这确实返回*last* *included* *Makefile* 在解析过程中的路径构建脚本.包含另一个文件后不要调用 my-dir.

所以.. 为了解决这个问题,我将我的 Android.mk 更改为以下内容.

 LOCAL_PATH := $(call my-dir)MY_PATH := $(LOCAL_PATH)包括 $(调用所有子目录生成文件)包括 $(CLEAR_VARS)LOCAL_PATH := $(MY_PATH)LOCAL_LDLIBS := -llog -ldlLOCAL_MODULE := rmsdkLOCAL_SRC_FILES := native.c包括 $(BUILD_SHARED_LIBRARY)

及其作品.

I'm compiling native sources and adding the dependencies with .a libs and those relative header files with the following structure.

/jni/

Android.mk

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -llog
LOCAL_MODULE    := ndk1
LOCAL_SRC_FILES := native.c
LOCAL_STATIC_LIBRARY := mschema 
include $(BUILD_SHARED_LIBRARY)

native.c

/jni/prereqs/

Android.mk

LOCAL_PATH := $(call my-dir)

include $(call all-subdir-makefiles)

include $(CLEAR_VARS)

--Used to call the sub-folders mk files

/jni/prereqs/mschema/

Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    :=mschema
LOCAL_SRC_FILES :=libmschema.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_STATIC_LIBRARY)

libmschema.a

/jni/prereqs/mschema/include

Header files. (.h)

But while trying to ndk-build (NDK5) I got the following error.

marcos@marcos-AY675AA-AC4-s5320br:~/dev/workspace/rmsdk.native.wraper$ ndk-buildmake:
 *** No rule to make target `/home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c', needed by `/home/marcos/dev/workspace/rmsdk.native.wraper/obj/local/armeabi/objs/ndk1/native.o'.  Stop.

While typing I noted the error is about /home/marcos/dev/workspace/rmsdk.native.wraper/jni/prereqs/mschema/native.c' and actually this file is under/home/marcos/dev/workspace/rmsdk.native.wraper/jni/native.c', what's wrong in my make files?

The problem could be avoided by changing the first Android.mk to the following:

LOCAL_PATH := $(call my-dir)
include $(call all-subdir-makefiles)
LOCAL_PATH :=/home/marcos/dev/workspace/rmsdk.native.wraper/jni
include $(CLEAR_VARS)
LOCAL_LDLIBS := -llog
LOCAL_MODULE    := ndk1
LOCAL_SRC_FILES := native.c
LOCAL_STATIC_LIBRARY := mschema
include $(BUILD_SHARED_LIBRARY)

But it looks wrong. Is there a better approach?

解决方案

From the Docs in NDK 5, the solution is to create a local variable..

my-dir Returns the path of the last included Makefile, which typically is the current Android.mk's directory. This is useful to define LOCAL_PATH at the start of your Android.mk as with:

    LOCAL_PATH := $(call my-dir)

IMPORTANT NOTE: Due to the way GNU Make works, this really returns
the path of the *last* *included* *Makefile* during the parsing of
build scripts. Do not call my-dir after including another file.

So.. to solve this problem I change my Android.mk to the following.

 LOCAL_PATH := $(call my-dir)
 MY_PATH := $(LOCAL_PATH)
 include $(call all-subdir-makefiles)

 include $(CLEAR_VARS)

 LOCAL_PATH := $(MY_PATH)

 LOCAL_LDLIBS := -llog -ldl
 LOCAL_MODULE    := rmsdk
 LOCAL_SRC_FILES := native.c

 include $(BUILD_SHARED_LIBRARY)

And its works.

这篇关于没有制定目标 NDK 的规则的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How to send data to COM PORT using JAVA?(如何使用 JAVA 向 COM PORT 发送数据?)
How to make a report page direction to change to quot;rtlquot;?(如何使报表页面方向更改为“rtl?)
Use cyrillic .properties file in eclipse project(在 Eclipse 项目中使用西里尔文 .properties 文件)
Is there any way to detect an RTL language in Java?(有没有办法在 Java 中检测 RTL 语言?)
How to load resource bundle messages from DB in Java?(如何在 Java 中从 DB 加载资源包消息?)
How do I change the default locale settings in Java to make them consistent?(如何更改 Java 中的默认语言环境设置以使其保持一致?)