【问题标题】:How to include the specific header file when there are two same files in system include path?当系统包含路径中有两个相同的文件时,如何包含特定的头文件?
【发布时间】:2014-03-11 02:00:24
【问题描述】:

我注意到这个问题:

Two header with same name in include path

但我遇到的问题是包含路径是系统包含路径。

假设有两个头文件:dir1/header.h dir2/header.h,它们位于系统包含路径中,首先搜索dir1,但我真正想要的是dir2/header.h。在这种情况下我该怎么办?

在 Android NDK 环境中。

假设两个系统包含路径是:

dir1:$(NDK_ROOT)\sources\cxx-stl\gabi++\include

dir2:$(NDK_ROOT)\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.6\include

现在我想要 dir2 中的标题。但 Android 编译器会先搜索 dir1 中的头文件。如果我使用了 -I 选项,如何将 dir2 路径更改为独立于平台的路径(例如 windows-x86_64 可能是 linux-x86)?

【问题讨论】:

    标签: android android-ndk makefile


    【解决方案1】:

    您必须在源文件中使用#include "dir2/header.h",然后在编译行中使用-I 列出父目录;因此,例如,如果第二个标头的完全限定路径名是 /usr/local/include/dir2/header.h,您将在编译行中添加 -I/usr/local/include

    预计到达时间

    请注意,在 makefile 中,您应该始终使用正斜杠,而不是反斜杠。

    此外,编译器总是搜索您在命令行中使用-I 提供的目录,按照您指定它们的顺序,之前它搜索任何标准地点。所以我真的不明白这个问题。如果默认位置是您想要的位置,那么只需添加一个指向另一个位置的-I 标志,它就会被使用。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。有两个头文件'cuda.h',一个在系统路径'/usr/local/cuda/include/cuda.h',另一个用指定Makefile中的'-I',即-I

      ${PWD}/dependency/libtorch/include/torch/csrc/api/include/torch/cuda.h. 
      

      我想包含第一个,但提到了第二个。然后我尝试用'#include "../../../local/cuda/include/cuda.h"' 替换'#include <cuda.h>'。它有效。

      希望这可以帮助你。

      【讨论】:

        猜你喜欢
        • 2016-02-21
        • 2013-05-25
        • 2021-07-11
        • 2014-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-08
        相关资源
        最近更新 更多