当系统包含路径中有两个相同的文件时,如何包含特定的头文件?

时间:2014-03-11 02:00:24

标签: android android-ndk makefile

我注意到这个问题:

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)?

2 个答案:

答案 0 :(得分:0)

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

ETA

Nate在makefile中你应该总是使用正斜杠而不是反斜杠。

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

答案 1 :(得分:0)

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

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

我想包括第一个,但提到了第二个。然后,我尝试将'#include <cuda.h>'替换为'#include "../../../local/cuda/include/cuda.h"'。可以。

希望这可以为您提供帮助。