【问题标题】:Android NDK: how to let gcc to use additional include directoriesAndroid NDK:如何让 gcc 使用额外的包含目录
【发布时间】:2011-11-13 00:31:33
【问题描述】:

一个简单的问题(我正在使用带有 cygwin 的 android NDK r6,但这是一个关于 makefile 和 gcc 的问题)。假设我在 jni/ 目录下放了一个库 mylib_v_1/。 Mylib 的结构如下:

mylib_v_1
   mylib
      include

在include目录下有两个文件,myinc1.hpp和myinc2.hpp。在 myinc1.hpp 中有一行:

#include <mylib/myinc2.hpp>

在我的 .cpp 文件中,在 jni/ 目录下,有以下行:

#include <mylib/myinc1.hpp>

我想设置 Android.mk(或需要设置的其他文件)以便让 gcc 知道使用,作为附加的包含目录 jni/mylib_v_1/ 以便使用带括号的#include (而不是两个文件,在我的真实案例中,有很多 .hpp 包含很多其他带有括号符号的 .hpp)。

我该怎么做?

谢谢。

附言。 如果在 .cpp 文件中我以这种方式更改包含:

#include "mylib/myinc1.hpp"

gcc find myinc1.hpp 但是,在处理它时,它找到了第二个包括:

#include  <mylib/myinc2.hpp>

然后停在那里,说它无法找到文件 myinc2.hpp。

【问题讨论】:

    标签: gcc makefile android-ndk


    【解决方案1】:

    选项 1:

    在您选择的模块内的 Android.mk 中添加以下行之一:

       LOCAL_C_INCLUDES := /path/to/your/includes # ignore previous includes
                                                  # OR
       LOCAL_C_INCLUDES += /path/to/your/includes # preserve previous includes
    

    如有必要,您可以创建一个指向“/path/to/your/includes”的环境变量并像这样包含它:

       LOCAL_C_INCLUDES := $(MYLIB_INCLUDES_PATH) # ignore previous includes
                                                  # OR
       LOCAL_C_INCLUDES += $(MYLIB_INCLUDES_PATH) # preserve previous includes
    

    选项 2:

    1. 将包含所有头文件的完整文件夹 (mylib) 复制到项目的“jni”文件夹中。

    2. 将以下行添加到您选择的模块内的 Android.mk 中:

      LOCAL_C_INCLUDES := $(LOCAL_PATH)/mylib
      

      LOCAL_C_INCLUDES += $(LOCAL_PATH)/mylib
      

    取决于是否有以前的包含。

    选项 3:

    为 Eclipse 安装 CDT 插件,并将“mylib”目录的绝对路径添加到项目的包含路径中。这是一个很棒的教程,展示了所有必要的步骤。

    http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-development/

    【讨论】:

    • 选项 1 和 2 对我不起作用,除非我在每个 c 包含的开头都有 -I,例如 -I/path/to/your/includes-I"/path/to/your/includes".
    • 仅在“LOCAL_C_INCLUDES +=”中使用 absolute 路径适用于 CDT 案例,尽管 ndk-build 没有这样的限制。
    【解决方案2】:

    您可以使用以下方法在 Android.mk 中添加 C 包含路径:

    common_CFLAGS := -Ijni/mylib/include
    

    任何其他路径都需要另一个 -I 选项。

    【讨论】:

    • 没有办法让它工作。它仍然说找不到 mylib/myinc1.hpp。我添加了 common_CFLAGS += $(LOCAL_PATH)/mylib,因为 LOCAL_PATH 应该是 jni 目录。
    • 从您的评论看来您忘记了路径前的 -I。
    • 我已经尝试了所有可能的组合。无事可做。真是尴尬……不过,项目位于d:/android/workspace/helloworld下。在 helloworld 下有 jni 目录,其中包含 .cpp 和 .mk 文件。使用 cygwin,我必须准确地进入 helloworld/jni 目录并输入:/cygdrive/d/android/android-ndk-r6/ndk-build NDK_LOG=1。希望这可以帮助你们帮助我!
    • 好的,我正在这里学习。首先,我启动了 NDK_BUILD V=1。这将强制构建过程显示 gcc 是如何被调用的。我尝试使用 common_FLAGS 和 LOCAL_C_INCLUDES 没有任何成功(实际上,没有 -I cmd 行选项显示 /mylib => 这是真正的问题)。从文档中我学到了另一种包含内容的方法:现在我使用 LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/mylib。它立即起作用。但建议改用 LOCAL_C_INCLUDES。妈的……
    • 感谢卢克,您的代码有效...遇到了同样的问题...坐了一个小时才弄清楚这件事...天哪
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2013-06-18
    • 2023-03-27
    • 2013-08-16
    相关资源
    最近更新 更多