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



我注意到这个问题:

在include路径

中包含两个名称相同的头

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

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

在Android NDK环境下。

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

dir1:$(NDK_ROOT)sourcescxx-stlgabi++include
dir2:$(NDK_ROOT)toolchainsarm-linux-androideabi-4.6prebuiltwindows-x86_64libgccarm-linux-androideabi4.6include

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

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

埃塔

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

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

我遇到了同样的问题。有两个头文件'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>'。它的工作原理。

希望这对你有帮助。

最新更新