我注意到这个问题:
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)?
答案 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"'
。可以。
希望这可以为您提供帮助。