1

我知道要构建 so 文件,我应该将源文件放在 /jni/ 文件夹中。但是我怎样才能在不同的文件夹中单独构建。

比如我的项目结构:

/jni/Android.mk
/jni/submodule1/Android.mk
/jni/submodule1/sub1.c
/jni/submodule2/Android.mk
/jni/submodule2/sub2.c

我试图在顶层的 Android.mk 中写这个:

$(LOCAL_PATH) :=$(call all-makefiles-under)

然后在子模块的 Android.mk 中编写 make info

错误是:

ndk-build 
make: *** No rule to make target `/home/../workspace/jni/sub.c', needed b
y `/home/../workspace/obj/local/armeabi/objs/submodule/sub.o'.  Stop.

有人可以给我一个解决方案吗?谢谢!

更新1:子模块中Android.mk的代码:

 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)

 LOCAL_SRC_FILES := sub.c 

 LOCAL_C_INCLUDES := $(LOCAL_PATH)

 LOCAL_MODULE := sub
 LOCAL_LDLIBS := -ldl -llog
 LOCAL_STATIC_LIBRARIES := libc

 LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
 LOCAL_MODULE_TAGS := debug
 include $(BUILD_EXECUTABLE)

解决了:

我应该在根目录中使用 ndk-build,而不是在 jni 目录中。感谢大家!

4

2 回答 2

1

您应该尝试include $(call all-subdir-makefiles)而不是$(LOCAL_PATH) :=$(call all-makefiles-under)在 main 中Android.mk并在 jni 文件夹下创建文件夹,其中包含单独的 c 文件和 Android.mk 文件

于 2013-08-13T11:49:52.673 回答
0

您是否尝试过类似的方法:

LOCAL_PATH := $(call my-dir)
LOCAL_SRC_FILES := /submodule1/sub1.c
于 2013-08-13T11:31:07.187 回答