25

我刚刚发现<stdlib.h><stdio.h>标头位于/usr/includeUbuntu 服务器的文件夹中,但我没有找到sys/types.h.

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

这是真的吗,文件在哪里?

4

5 回答 5

60

我的 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只是去掉不重要的行,留下可能包含包含文件位置的行。

于 2012-08-06T05:52:16.293 回答
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
于 2012-08-06T06:18:26.740 回答
7

如果您有可用的 locate 命令,您可以简单地使用locate

-bash-3.2$ locate sys/types.h
/usr/include/sys/types.h
/usr/lib/syslinux/com32/include/sys/types.h
-bash-3.2$

这是最快和最简单的方法。

于 2012-08-06T06:15:25.400 回答
4

只是为了将来参考,我在我的 debian 机器上遇到了这个问题,结果在我的情况下

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

libc6-dev-i386 是我似乎需要安装的包

于 2014-12-04T22:19:09.053 回答
2

在 Linux 上,types.h应该在/usr/include/sys/types.h.

于 2012-08-06T05:50:21.320 回答