sys/types.h位于哪里?

25

我刚刚发现在Ubuntu服务器中,<stdlib.h><stdio.h>头文件位于/usr/include文件夹中,但我找不到sys/types.h

我开始怀疑编译器实际上不会使用/usr/include文件夹中的头文件。

这是真的吗?sys/types.h文件在哪里?


不行,头文件必须存在。也许可以在 /usr/local/include 目录下找找。 - user529758
16
运行 echo "#include <sys/types.h>" | gcc -E -x c - | grep types 命令可以查看编译器从哪里引入了 sys/types.h 头文件。请注意,翻译保持原意并简明扼要,不提供解释或其他额外内容。 - Mat
@Mat 它有效,我找到了,顺便问一下,最后一个参数 - 有什么用? - mko
实际上,由于gcc是程序员常用的软件工具之一,你可以在这里或AskUbuntu发布。我个人认为无所谓,因为它在Ubuntu领域之外也非常有用(但我会听从大家的意见)。 - paxdiablo
实际上,@JonathanLeffler非常正确。头文件的定位方式是完全由实现定义的,因此它们根本不需要在文件系统上存在。编译器很可能会根据您包括的内容注入状态。甚至可能会访问FSF网站以获取头文件,尽管如果网络连接断开将失去编译的能力,这可能会令人恼火 :-) - paxdiablo
显示剩余6条评论
5个回答

63

我的Debian盒子(希望Ubuntu在他们的热情中没有把它搞砸得太厉害)将其放置在/usr/include/sys/types.h中。

你最好执行:

find /usr/include -name types.h
find / -name types.h # if not found by one above

但是请记住,开发所需的东西可能甚至没有被安装在服务器上。除非是针对编译器农场的服务器,否则如果编译器和其他一些东西不是默认安装的一部分,我不会感到惊讶。

如果编译器确实已经定位到某个位置,而你只是不知道它在哪里,你可以使用类似以下的命令:

echo "#include <sys/types.h>" | gcc -E -x c - | grep /types.h

为了找出它从哪里获取,

那个 gcc 命令行:

  • 在预处理阶段后停止 (-E);
  • 强制将文件视为 C 源代码 (-x c);以及
  • 从标准输入 (-) 检索程序,在这种情况下是从 echo 语句中获取。

最后的 grep 只会剥离掉不重要的行,留下可能包含所需文件位置的行。


1
哇,这是个好答案,我学到了很多。使用 gcc 的方法起作用了,现在我找到了那个文件。 - mko
@yozloy,只是出于兴趣,它在哪里? - paxdiablo
在Ubuntu 12上,我在/usr/include/linux/types.h找到了这个。 - jmervine

16

sys/types.h文件位于/usr/include/sys/types.h

如果你遇到这种致命错误

.../linux/linux_types.h:146:38: fatal error: /usr/include/sys/types.h: No
such file or directory

使用以下代码修复:

sudo apt-get install build-essential flex libelf-dev libc6-dev-amd64 binutils-dev libdwarf-dev

5
如果只是为了sys/types.h头文件,我认为build-essential应该足够了。 - Lester Cheung
2
在Linux Mint 16上,执行sudo apt-get install build-essential命令就足够了。 - Chris Weber

10
如果您有可用的locate命令,您可以简单地使用它:
-bash-3.2$ locate sys/types.h
/usr/include/sys/types.h
/usr/lib/syslinux/com32/include/sys/types.h
-bash-3.2$

这是最快最简单的方法。


4

仅供参考,我在我的Debian机器上遇到了这个问题,结果发现在我的情况下

$ apt-file find /usr/include/sys/types.h
libc6-dev-i386: /usr/include/sys/types.h

我似乎需要安装libc6-dev-i386这个软件包。


2
在Linux系统中,types.h文件应该位于/usr/include/sys/types.h目录下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接