我注意到这个问题:
在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>'
。它的工作原理。
希望这对你有帮助。