【问题标题】:What does this line mean? LOCAL_EXPORT_C_INCLUDES这条线是什么意思? LOCAL_EXPORT_C_INCLUDES
【发布时间】:2011-07-06 10:51:41
【问题描述】:

非常简单的问题,希望得到一个非常简单的答案。我一直在查看很多人的 android.mk 文件并注意到了这一行。我的 NDK 文档中没有关于它的文档(至少 find . -name "*.txt" | xargs grep "LOCAL_EXPORT_C_INCLUDES" 什么也没想到)。这是我读过的唯一一份文档……让我大吃一惊……

第 2 部分:我是否正确地假设我需要这一行才能将预构建的共享库与另一个模块一起使用?谢谢你们(和女孩)

三。导出预建库的标头:

上面的示例被称为“幼稚”,因为在实践中, foo-user.c 将依赖于通常的特定声明 在与预构建库一起分发的头文件中找到(例如“foo.h”)。

换句话说,foo-user.c 将会有这样一行:

包括

并且您需要向编译器提供标头及其包含路径 在构建 foo-user 模块时。 一种简单的处理方法是在预建模块中使用导出 定义。例如,假设文件“foo.h”位于 相对于预建模块的'include'目录,我们可以这样写:

`包括 $(CLEAR_VARS)

LOCAL_MODULE := foo-prebuilt

LOCAL_SRC_FILES := libfoo.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

包括 $(PREBUILT_SHARED_LIBRARY)`

此处的 LOCAL_EXPORT_C_INCLUDES 定义确保任何模块 取决于预建的将自动拥有其 LOCAL_C_INCLUDES 前面加上预构建的包含目录的路径,因此将 能够在其中找到标题。

网址:http://www.srombauts.fr/android-ndk-r5b/docs/PREBUILTS.html

【问题讨论】:

  • 是的。你的假设是正确的。确保您的 LOCAL_EXPORT_C_INCLUDES 指向 .so 文件的包含目录。欢迎你,我!

标签: android android-ndk


【解决方案1】:

以下对r6 NDK的docs文件夹中ANDROID-MK.html中的LOCAL_EXPORT_*变量的解释:

LOCAL_EXPORT_CFLAGS
定义此变量以记录一组 C/C++ 编译器标志,这些标志将
被添加到使用
的任何其他模块的 LOCAL_CFLAGS 定义中 这个带有 LOCAL_STATIC_LIBRARIES 或 LOCAL_SHARED_LIBRARIES。

例如,考虑具有以下定义的模块“foo”:

   include $(CLEAR_VARS)
   LOCAL_MODULE := foo
   LOCAL_SRC_FILES := foo/foo.c
   LOCAL_EXPORT_CFLAGS := -DFOO=1
   include $(BUILD_STATIC_LIBRARY)

还有一个名为“bar”的模块,它依赖于它:

   include $(CLEAR_VARS)
   LOCAL_MODULE := bar
   LOCAL_SRC_FILES := bar.c
   LOCAL_CFLAGS := -DBAR=2
   LOCAL_STATIC_LIBRARIES := foo
   include $(BUILD_SHARED_LIBRARY)

然后,标志 '-DFOO=1 -DBAR=2' 将在
建筑吧.c

导出的标志会附加到模块的 LOCAL_CFLAGS 中,以便您可以
轻松覆盖它们。它们也是可传递的:如果“动物园”取决于
'bar' 依赖于 'foo',然后 'zoo' 也将继承所有标志
由“foo”导出。

最后,在构建
的模块时使用导出的标志 出口它们。在上面的例子中,-DFOO=1 不会被传递给
编译 foo/foo.c 时的编译器。

LOCAL_EXPORT_CPPFLAGS
与 LOCAL_EXPORT_CFLAGS 相同,但仅适用于 C++ 标志。

LOCAL_EXPORT_C_INCLUDES
与 LOCAL_EXPORT_CFLAGS 相同,但对于 C 包含路径。
如果“bar.c”想要包含标题,这可能很有用
由模块'foo'提供。

【讨论】:

  • 可惜它没有像宣传的那样工作。就我而言,在我要导入的库中,我的标题有“LOCAL_EXPORT_C_INCLUDES”。但是对于我正在构建的库,我仍然必须指定之前在“LOCAL_EXPORT_C_INCLUDES”中指定的相同标题,因为它们不包括在内......这个修改后的构建系统绝对糟糕。
  • @jww 这是用 AOSP 源代码树构建的吗?那么你需要LOCAL_EXPORT_C_INCLUDE_DIRS 而不是LOCAL_EXPORT_C_INCLUDES...
猜你喜欢
  • 2015-01-27
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多