当前位置: 首页>>技术教程>>正文


sys/types.h在哪里?

, ,

问题描述

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

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

这是真的,文件在哪里?

最佳解决办法

我的Debian盒子(并且希望Ubuntu并没有对其热情满怀过分)在/usr/include/sys/types.h中有它。

最好的选择是首先执行:

find /usr/include -name types.h

然后:

find / -name types.h

如果您没有在第一个中找到它。

但是,请记住,甚至可能没有安装开发资料。我会想象将服务器盒用作服务器,并且如果编译器和其他很多东西不是默认安装的一部分,这也不会令我感到惊讶(但是它将有很多服务器,例如ftpdApache等)。

如果编译器将其定位在某个地方,而您只是不知道在哪里,则可以使用如下代码:

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

找出它的来源。

要么:

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

对于您担心的其他标题。

Aside: That gcc command line stops after the pre-processing phase (-E), forces the file to be treated as C source code (-x c) and retrieves the program from standard input (-), in this case from the echo statement.

最后的grep只是去除了不重要的行。

次佳解决办法

文件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

第三种解决办法

如果您有可用的定位命令,则只需使用locate即可:

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

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

第四种办法

仅供参考,我在debian机器上遇到了这个问题,事实证明,

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

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

第五种办法

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7544.html,未经允许,请勿转载。