【问题标题】:What is the simplest working example of the Android NDK's module importation?Android NDK 的模块导入最简单的工作示例是什么?
【发布时间】:2013-05-28 04:13:33
【问题描述】:

我找不到 Android NDK 的 module importation feature 的工作示例。以下 Android.mk 文件似乎是正确的,并且内部模块构建和执行没有错误。但是,构建外部模块失败并显示以下错误消息:

Android NDK:jni/inner/Android.mk:inner: LOCAL_MODULE_FILENAME 不应包含文件扩展名
Android NDK: jni/inner/Android.mk:inner: LOCAL_MODULE_FILENAME 不得包含文件扩展名
/home/caleb/dev/android-ndk-r8e/build/core/build-shared-library.mk:30: * Android NDK: Aborting 。停下来。

内部包含的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := inner
LOCAL_MODULE_FILENAME := libinner
LOCAL_SRC_FILES := inner-module.c

include $(BUILD_SHARED_LIBRARY)

外层,包含Android.mk文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := outer

$(call import-module,inner)

LOCAL_SHARED_LIBRARIES += inner

include $(BUILD_SHARED_LIBRARY)

【问题讨论】:

  • 你声明了NDK_MODULE_PATH吗?如果有,是什么?
  • NDK_MODULE_PATH 被声明并设置为“jni”,即内部模块所在的目录。如果我取消设置 NDK_MODULE_PATH,我会得到一个不同的错误,表明构建系统无法找到内部模块。

标签: android android-ndk


【解决方案1】:

尝试将 import-module 调用放在外部文件的末尾。在引用 'inner' 之前不必放置它,NDK 文档实际上建议您将它放在最后。

【讨论】:

    【解决方案2】:

    您正在做的事情有一些问题,所以事情应该是这样的。

    内部包含的 Android.mk 文件:

    # save away the previous local path
    INNER_SAVED_LOCAL_PATH := $(LOCAL_PATH)
    
    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := inner
    LOCAL_MODULE_FILENAME := libinner
    LOCAL_SRC_FILES := inner-module.c
    
    include $(BUILD_SHARED_LIBRARY)
    # at this point LOCAL_MODULE_FILENAME will have been auto
    #  set to libinner.so or similar by the call to BUILD_SHARED_LIBRARY
    
    # restore previous local path
    LOCAL_PATH := $(INNER_SAVED_LOCAL_PATH)
    

    外层,包含Android.mk文件:

    LOCAL_PATH := $(call my-dir)
    
    $(call import-module,inner)
    # at this point
    #  a) we've still got the correct LOCAL_PATH as we didn't trash it in
    #     the included Android.mk file
    #  b) LOCAL_MODULE_FILENAME is still set to libinner.so which if not
    #     unset will cause BUILD_SHARED_LIBRARY to complain
    
    include $(CLEAR_VARS)
    # we've now got a clean slate
    
    LOCAL_MODULE := outer
    
    # the build system has 'remembered' the inner module
    LOCAL_SHARED_LIBRARIES += inner
    
    include $(BUILD_SHARED_LIBRARY)
    

    我不确定这是否是 方法,但它对我有用 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 2017-07-23
      • 2013-11-14
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多