Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 包括来自预构建库Android.mk的头文件_C++_Maven_Cmake_Android Ndk_Java Native Interface - Fatal编程技术网

C++ 包括来自预构建库Android.mk的头文件

C++ 包括来自预构建库Android.mk的头文件,c++,maven,cmake,android-ndk,java-native-interface,C++,Maven,Cmake,Android Ndk,Java Native Interface,我已经在创建库时使用了一个预构建库 include $(PREBUILT_SHARED_LIBRARY) 是否包含已验证的天气库 $(modules-get-list) 当我试图在预构建的库中包含一个头文件时,我会遇到错误header not found。下面是我确切的Android.mk文件 LOCAL_PATH := $(call my-dir) # import prebuilt-library include $(CLEAR_VARS) LOCAL_MODULE := pre

我已经在创建库时使用了一个预构建库

include $(PREBUILT_SHARED_LIBRARY)
是否包含已验证的天气库

$(modules-get-list)
当我试图在预构建的库中包含一个头文件时,我会遇到错误header not found。下面是我确切的Android.mk文件

LOCAL_PATH := $(call my-dir)

# import prebuilt-library
include $(CLEAR_VARS)
LOCAL_MODULE    := prebuilt-library
LOCAL_SRC_FILES := ../../../target/dependency/libs/$(TARGET_ARCH_ABI)/libprebuilt.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

# building provider interface library for communication
include $(CLEAR_VARS)
LOCAL_MODULE := library-interface
LOCAL_SRC_FILES := LibraryComminicator.cpp
LOCAL_SHARED_LIBRARIES := prebuilt-library

include $(BUILD_SHARED_LIBRARY)

$(warning Existing modules: "$(modules-get-list)")

# Include the Android Maven plugin generated makefile
# Important: Must be the last import in order for Android Maven Plugins paths to work
include $(ANDROID_MAVEN_PLUGIN_MAKEFILE)

尝试下面的Android.mk:

LOCAL_PATH := $(call my-dir)
EXT_LIB_ROOT := $(LOCAL_PATH)/../../../target/dependency # or whatever

# building provider interface library for communication
include $(CLEAR_VARS)
LOCAL_MODULE := library-interface
LOCAL_SRC_FILES := LibraryComminicator.cpp
LOCAL_SHARED_LIBRARIES := prebuilt-library

include $(BUILD_SHARED_LIBRARY)

# import prebuilt-library
LOCAL_PATH := $(EXT_LIB_ROOT)
include $(CLEAR_VARS)
LOCAL_MODULE    := prebuilt-library
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libprebuilt.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

$(warning Existing modules: "$(modules-get-list)")
基本规则是:xxx\u INCLUDE\u文件应与“当前目录”相对,而LOCAL\u SRC\u文件与$(LOCAL\u PATH)相对,而不是与“当前目录”相对。对于NDK,“当前目录”通常是
$(本地路径)/…
,但这可能会改变,特别是当链接了Android.mk文件时,即一个文件包含另一个文件


对于预构建的共享库模块,您真的不需要本地路径,但我更喜欢将本地SRC文件尽可能短。

也许,您应该使用
LOCAL\u EXPORT\u C\u INCLUDES:=../../../../target/dependency/include
?@AlexCohn我已将其修改为包含头文件,但仍然是相同的结果,我的错。尝试
LOCAL\u EXPORT\u C\u INCLUDES:=$(LOCAL\u PATH)/../../../../../target/dependency/include
我实际上也尝试过,但结果仍然相同您能在磁盘上找到丢失的头文件吗?或者你可能不需要这个include?
LOCAL\u EXPORT\u C\u include:=/Users/rk/native test/apk solution/target/dependency/libs/include/com/raj/vs/ndktest/base
这个版本的C\u include可以正常工作,但在以下一个
EXT\u LIB\u ROOT:=../../../target/dependendency/libs LOCAL\u EXPORT\u C\u include:=$(EXT\u ROOT)/include/com/cnh/pf/activation/base include$(预构建的共享库)
是的,它失败了,因为正如我上面解释的,ndk构建的“当前目录”没有精确定义,通常是Android.mk文件上一级的项目目录(按照惯例,称为jni,由
$(调用我的目录)返回)
作为相对路径。因此,EXT_LIB_ROOT的定义可能应该是
$(LOCAL_path)/../../../../../target/dependency/libs
,但您可以通过将
$(warning LOCAL_path=$(LOCAL_path))
添加到您的Android.mk来轻松检查