我正在尝试使用NDK在Android构建系统中修改Android原生模块。 使用Android模块make命令构建时,我的模块正确构建,没有任何错误。 但是当我尝试使用NDK构建设置时,我面临着android系统包含文件的问题。 我的模块结构是:
android
|
external
|
MyModule
|
jni --> Android.mk
mysharedobj --> Android.mk
我的Native模块包含许多android包含,例如
#include <JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
#include <gui/Surface.h>
#include <gui/ISurface.h>
在NDK文档的帮助下,我能够解决包含错误,但我面临着错误, 例如:
jni/com_my_module_NativeInterface.cpp:3:21: fatal error: JNIHelp.h: No such file or directory compilation terminated.
- &gt;为了解决JNIHelp.h包含错误,我在Android.mk中添加了以下行
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/../../../libnativehelper/include/nativehelper
此后再次出现一个错误,
jni/../../../libnativehelper/include/nativehelper/JNIHelp.h:27:24: fatal error: cutils/log.h: No such file or directory compilation terminated.
- &GT;为解决上述错误,我修改了Android.mk
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/../../../libnativehelper/include/nativehelper \
$(LOCAL_PATH)/../../../system/core/include \
此后又一次错误
/home/user/android-ndk-r8e/platforms/android-3/arch-arm/usr/include/linux/uio.h:18:8: error: redefinition of 'struct iovec'
jni/../../../system/core/include/cutils/uio.h:33:8: error: previous definition of 'struct iovec'
如何使用android系统包含文件成功构建本机模块? 请帮帮我。
答案 0 :(得分:5)
我不确定,但是尝试将 -DHAVE_SYS_UIO_H 标记放在 LOCAL_CFLAGS 上:
LOCAL_CFLAGS += -DHAVE_SYS_UIO_H
答案 1 :(得分:0)
您应该使用LOCAL_LDLIBS
而不是将{ndk依赖项添加到LOCAL_C_INCLUDES
。以下示例来自我的Android.mk:
LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH) -llog -lz -lm
结帐文档,了解您应根据需要添加哪些库。