我的/ usr / include / sys目录在哪里?


13

我最近从Kubuntu 12.04升级到13.04,完全重新安装。

使用gcc 4.7.3。我编译了一些程序以发现没有/usr/include/sys目录。也就是说,types.hstat.h,等,都是不存在的。它们存在于include/linux目录中,但不存在include/sys

这是怎么回事?


GCC打印的错误消息是什么?请编辑问题以提供此问题以及与您的问题有关的其他信息。
edwin

1
您是否已安装基本版?
赛斯2014年

我尝试过的两个程序可以很好地编译,因此没有来自gcc的错误消息。我只是不知道标题从哪里来。我有一个编辑器,它建立对函数和syscall之类的引用,但很高兴找不到目录。
Duck

1
是的,build-essential是最新的。
鸭子2014年

Answers:


13

如果您在64位上使用Ubuntu(我现在不能在32位系统上完全发短信),那么问题所在的目录是:

/usr/include/x86_64-linux-gnu/sys

现在,有了这些信息,如果您确实需要在该位置(/usr/include/sys)上使用这些文件,可以在这些终端上创建符号链接:

sudo ln -s /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/sys/types.h
sudo ln -s /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/sys/stat.h

# ...etc

是的,64位。我在其他地方读过类似的文章,似乎所有内容都在该目录中,但是我不确定如何将标头从“ #include sys / stat.h”包含到x86_64 / sys目录中。这是一些新的gcc注入功能吗?临时而言,我看不到任何符号链接或类似的链接(外部)会导致这种行为。
鸭子

好像我们在风中彼此掠过了。因此,最重要的是编译器在做一些魔术,但是我可能需要使用一些symlink hack才能使编辑器满意?
Duck

@Duck我只是在您的评论2分钟前编辑了我的答案:)
RaduRădeanu2014年


1

sys目录是带有许多系统命令的unix / linux系统标头目录。不同品牌/版本的linux可能会将其放在不同的位置。以下命令可以为您提供帮助:

find /usr/include -type d -name sys
On my ubuntu 16 got the two
/usr/include/bsd/sys
/usr/include/x86_64-linux-gnu/sys

第一个是BSD UNIX系统标头的所在地。
第二个目录是包含Linux 64位系统头的目录。

我遇到了cmake无法找到sys / stat.h文件的问题。我的临时解决方案是建立一个符号链接

/user/local/include/sys/stat.h from /usr/include/x86_64-linux-gnu/sys/stat.h

我不想污染/ usr / include目录,并且只链接到一个特定的头文件,而不链接整个sys目录。我认为这是cmake的缺陷,因此仅建立一个链接即可将影响降至最低。希望这可以帮助那些遭受同样问题困扰的人。


1

让我们检查一下gcc的默认包含搜索路径是什么。从这个答案中,我们得到以下命令:

gcc -xc -E -v -

在输出的结尾,我在计算机上看到了这一点:

ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include

注意倒数第二行。这意味着,当您使用编译C文件时#include <sys/stat.h>,gcc会/usr/include/x86_64-linux-gnu/sys/stat.h在尝试之前进行查找/usr/include/sys/stat.h,而无需我们进行任何符号链接。


0

由于我的体系结构是amd64,所以没有libc6-dev-amd64。要安装的软件包为libc6-dev-i386

这样就解决了CPAN包的依赖性。


“由于我的体系结构是amd64,所以没有libc6-dev-amd64”:这是什么意思?
Marc Vanhoomissen

我的意思是,在x86_64架构上,是libraries / kernel / etc。软件包具有amd64体系结构。因此,libc6-dev-amd64无法安装。问题仍然存在,某些软件希望看到/ usr / include / sys /。
加里·特尔基亚
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.