【发布时间】:2015-10-28 10:05:07
【问题描述】:
我正在尝试将我的预构建库包含在现有的 Android 模块 art/runtime/ 中。我遵循了官方文档,找到了here。具体来说,这些是我所做的更改:
在 art/Android.mk 中添加行:
# This makes sure my library's .mk is found
include $(art_path)/mylib/Android.mk
在 art/runtime/Android.mk 中添加行:
# Added this, after the LOCAL_C_INCLUDES
LOCAL_STATIC_LIBRARIES := mylib-prebuilt
# Also, on the next mention of LOCAL_STATIC_LIBRARIES, I changed the
# assignment operator to '+=', so mylib won't overriden
包含在art/runtime.cc source mylib 的头文件中:
#include "mylib.h"
// then at some point use it
我已将mylib 的来源放入art/mylib。我使用常规 Makefile 手动构建存档 libmylib.a,我希望将其静态链接到 libart.so。
在art/mylib 找到的 Android.mk 中,我添加了以下内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := mylib-prebuilt
LOCAL_SRC_FILES := $(LOCAL_PATH)/libmylib.a
LOCAL_EXPORT_C_INCLUDES := \
$(LOCAL_PATH)/mylib.h \
$(LOCAL_PATH)/another_header.h
include $(PREBUILT_STATIC_LIBRARY)
通过导出 C 包含,依赖模块应该自动将它们附加到它们的本地列表中。但是,情况并非如此,因为我收到错误:
致命错误:找不到“mylib.h”文件
如果我用一种我真的不应该的愚蠢方式解决这个问题,我会偶然发现一个链接错误,因为我的libmylib.a 在链接期间从未使用过。
其他信息:
我已将mylib 放在art/mylib 中,因为它将成为art namespace 的一部分,并且它的方法将由art/runtime 源调用/被调用,例如runtime.cc。我选择使用prebuilt-libraries,而不是直接包含我的源代码,比如垃圾收集器(位于 art/runtime/gc`),因为我想将特定的编译标志传递给单个源文件。
我已经尝试过其他问题的解决方案,但都失败了,找到了 here 和 here。
有什么想法吗?
编辑: 当我尝试进行完整构建时,出现以下错误:
make: *** 没有制定目标的规则 'out/host//obj/STATIC_LIBRARIES/mylib-prebuilt_intermediates/export_includes', 需要 'out/host//obj/EXECUTABLES/dex2oat_intermediates/import_includes'。 停下来。
谢谢!
【问题讨论】:
标签: android android-ndk android-source android-build