【问题标题】:including header files from prebuilt library Android.mk包括来自预建库 Android.mk 的头文件
【发布时间】:2017-10-02 18:39:23
【问题描述】:

我使用

在我的库创建中包含了一个预建库
include $(PREBUILT_SHARED_LIBRARY)

通过使用是否包含经过验证的天气库

$(modules-get-list)

当我尝试在预建库中包含一个头文件时,我遇到了找不到头文件的错误。以下是我的确切 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)

【问题讨论】:

  • 也许,你应该使用LOCAL_EXPORT_C_INCLUDES := ../../../target/dependency/include ?
  • @AlexCohn 我已对其进行了修改以包含头文件,但结果仍然相同
  • 对不起,我的错。试试LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../target/dependency/include
  • 其实我也试过了,结果还是一样
  • you 可以在您的磁盘上找到丢失的头文件吗?或者也许你不需要这个包含?

标签: c++ maven cmake android-ndk java-native-interface


【解决方案1】:

试试下面的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_INCLUDE_FILES 应该相对于“当前目录”,而 LOCAL_SRC_FILES 相对于 $(LOCAL_PATH),而不是相对于“当前目录”。使用 NDK,“当前目录”通常是 $(LOCAL_PATH)/..,但这可能会改变,尤其是如果 Android.mk 文件被链接,即一个包含另一个文件。

对于 PREBUILT_SHARED_LIBRARY 模块,您确实不需要 LOCAL_PATH,但我更喜欢使 LOCAL_SRC_FILES 尽可能短。

【讨论】:

  • LOCAL_EXPORT_C_INCLUDES := /Users/rk/native-test/apk-solution/target/dependency/libs/include/com/raj/vs/ndktest/base 这个版本的 c_includes 运行良好,但对于低于一个 EXT_LIB_ROOT := ../../../target/dependency/libs LOCAL_EXPORT_C_INCLUDES := $(EXT_LIB_ROOT)/include/com/cnh/pf/activation/base include $(PREBUILT_SHARED_LIBRARY) 失败了
  • 是的,它失败了,因为正如我在上面解释的那样,ndk-build 的“当前目录”没有完全定义,通常它是项目目录的上一层 Android.mk 文件(按照惯例,称为 jni 并由 $(call my-dir) 作为相对路径返回。因此,您对 EXT_LIB_ROOT 的定义可能应该是 $(LOCAL_PATH)/../../../target/dependency/libs跨度>
  • 但是您可以通过将$(warning LOCAL_PATH=$(LOCAL_PATH)) 添加到您的Android.mk 来轻松检查
猜你喜欢
  • 2015-02-23
  • 1970-01-01
  • 2012-01-27
  • 2015-09-28
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多