/ usr / include / linux和/ usr / include / x86_64-linux-gnu /有什么区别

时间:2018-09-09 14:18:04

标签: c linux header

我对本机C编程非常陌生,现在我正尝试配置自己的IDE以正确设置包含路径。由于我想浏览我添加的sys/xxx.h个文件

/usr/include/x86_64-linux-gnu/

到我的包含路径。但是还有/usr/include/linux似乎也包含相同的标头。那么它们之间有什么区别呢?我应该实际使用哪一个?

1 个答案:

答案 0 :(得分:5)

我可以立即告诉您,目录/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目录传递给编译器。它已经知道要使用它们了,不需要再次告诉,而再次告诉它可能会使事情搞砸(例如,上述目录的 order 很重要)。

作为应用程序程序员,您不必担心哪个标头“属于”哪个目录。这完全是编译器和C库开发人员以及Linux发行维护人员的任务。