为什么gcc在/ usr / include之前搜索/ usr / include / x86_64-linux-gnu

时间:2014-05-18 07:18:54

标签: gcc

gcc手册说,搜索C(而不是C ++)编译的系统头的顺序是:

   /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

在我的系统上它显示

的偏好
/usr/include/x86_64-linux-gnu/

/usr/include

为什么?

在我的系统上,我只有第一个和第四个目录,我的头文件只在第四个。那么

/usr/include/x86_64-linux-gnu 

进入搜索???

2 个答案:

答案 0 :(得分:1)

以这种方式思考:您希望首先拥有最适合您系统的包含文件。与编译相同,如果您知道自己在x86_64上,请使用该架构上可用的指令/结构(SSEn),这可能是最快,最有效的...如果您不能让它们回归到可用的更通用的实体:因此首先搜索和使用大多数特定的东西。

答案 1 :(得分:1)

手册说这是普通Unix系统的系统头搜索顺序。对于所有Unix和Linux主机来说,即使适当地替换占位符libdirtarget,也不总是如此。并且,在GNU文档中持续存在多年的重大错别字,时代错误或松懈并不为人所知。

在您的情况下,target = x86_64-linux-gnulibdir最有可能= /usr/lib。对于/usr/target/include阅读/usr/include/target, 为你的Linux发行版(和我的)。通过这种转换,你实际上 确实有第三个目录,它对/usr/include/x86_64-linux-gnu/来说是正确的 在搜索顺序中位于/usr/include之前。

您的标题问题是为什么优先级,而user1666959会回答 如果不是你结束的那个。