我刚发现<stdlib.h>
和<stdio.h>
标题位于Ubuntu服务器的/usr/include
文件夹中,但我找不到sys/types.h
。
我开始怀疑编译器实际上不会使用/usr/include
文件夹中的头文件。
这是真的,文件位于何处?
答案 0 :(得分:50)
我的Debian框(并且希望Ubuntu还没有在热情中将其太多),/usr/include/sys/types.h
中有它。
最好的办法是先执行:
find /usr/include -name types.h
然后:
find / -name types.h
如果你没有在第一个中找到它。
但是,请记住开发内容甚至可能都没有安装。我想成像一个服务器盒用作服务器,如果编译器和编译器并不会让我感到惊讶一堆其他的东西不是默认安装的一部分(但它会有很多服务器的东西,如ftpd
或Apache
等等。)
如果编译器将它定位在某个地方并且你不知道在哪里,你可以使用类似的东西:
echo "#include <sys/types.h>" | gcc -E -x c - | grep /types.h
找出它的来源。
或者:
echo "#include <stdio.h>" | gcc -E -x c - | grep /stdio.h
你担心的另一个标题。
除此之外:
gcc
命令行在预处理阶段(-E
)之后停止,强制将文件视为C源代码(-x c
)并从中检索程序标准输入(-
),在本例中来自echo
语句。
最后的grep
只是删除了不重要的行。
答案 1 :(得分:14)
文件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
答案 2 :(得分:6)
如果您找到了可用的命令,则可以使用locate
:
-bash-3.2$ locate sys/types.h
/usr/include/sys/types.h
/usr/lib/syslinux/com32/include/sys/types.h
-bash-3.2$
这是最快捷,最简单的方法。
答案 3 :(得分:4)
为了将来参考,我在我的debian机器上遇到了这个问题,结果发现在我的情况下
$ apt-file find /usr/include/sys/types.h
libc6-dev-i386: /usr/include/sys/types.h
libc6-dev-i386是我看似需要安装的软件包
答案 4 :(得分:2)
在Linux上,types.h
应位于/usr/include/sys/types.h
。
答案 5 :(得分:0)
在我的Slackware中,我需要安装glibc来解决这个问题。