我对原生C编程很新,现在我正在尝试配置我的IDE以正确设置包含路径。因为我想通过sys/xxx.h
文件导航我添加
/usr/include/x86_64-linux-gnu/
到我的包含路径。但也有/usr/include/linux
似乎包含相同的标题。那么他们之间有什么区别?我应该使用哪一个呢?
我可以立即告诉你,目录/usr/include/linux
和/usr/include/asm
永远不应该包含在系统头目录列表中。这些目录中的标题用作#include <linux/whatever.h>
或#include <asm/whatever.h>
,而不是#include <whatever.h>
。
这个问题的其余部分取决于你正在使用的Linux的“分布”,所以我不能只说出来。幸运的是,有一种方法可以让编译器告诉你。在终端窗口中运行此命令(完全如图所示):
LC_ALL=C gcc -v -xc -E /dev/null 2>&1 |
sed -ne '/search starts here/,/End of search list/p'
您将获得类似于此的输出,但细节可能略有不同:
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/8/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
列出的目录是您应该配置IDE以查找系统头的目录,以便查找声明和诸如此类的东西。但是,您不应将IDE配置为将任何这些目录作为-I
目录传递给编译器。它已经知道要使用它们,它不需要再次被告知,并且再次告诉它可以搞砸了(例如,上述目录的顺序很重要)。
作为应用程序程序员,您无需担心哪些标题“属于”哪个目录。这完全是编译器和C库开发人员以及Linux发行版维护者的任务。