sys/types.h:没有那个文件或目录。

24
我试图编译一个模块,但遇到了这个错误。
fatal error: sys/types.h: No such file or directory
compilation terminated.

这是我的模块文件头

#include <linux/init.h>           // Macros used to mark up functions e.g. __init __exit
#include <linux/module.h>         // Core header for loading LKMs into the kernel
#include <linux/device.h>         // Header to support the kernel Driver Model
#include <linux/kernel.h>         // Contains types, macros, functions for the kernel
#include <linux/fs.h>             // Header for the Linux file system support
#include <asm/uaccess.h>          // Required for the copy to user function
#include <sys/types.h>

我的Makefile

obj-m = test.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我已经尝试搜索这个文件

 find /usr/include -name types.h

这里是结果

/usr/include/sys/types.h
/usr/include/libr/sdb/types.h
/usr/include/rpc/types.h
/usr/include/i386-linux-gnu/sys/types.h
/usr/include/i386-linux-gnu/asm/types.h
/usr/include/i386-linux-gnu/bits/types.h
/usr/include/linux/iio/types.h
/usr/include/linux/types.h
/usr/include/x86_64-linux-gnu/sys/types.h
/usr/include/x86_64-linux-gnu/asm/types.h
/usr/include/x86_64-linux-gnu/bits/types.h
/usr/include/asm-generic/types.h
/usr/include/c++/5/parallel/types.h

我尝试将它设置为#include "/usr/include/sys/types.h",但是遇到了以下错误:

/usr/include/sys/types.h:25:22: fatal error: features.h: No such file or directory
compilation terminated.

我正在使用Kali Linux(Debian) AMD64平台。

Linux kali 4.5.0-kali1-amd64 #1 SMP Debian 4.5.5-1kali1 (2016-06-06) x86_64 GNU/Linux

出了什么问题?谢谢。

已解决

非常抱歉,这是我的错误,在类型中打错了一个字母并尝试包含sys/types.h文件,但实际上完全不需要,因为在我的情况下,所有类型都在/usr/src/linux-headers-4.5.0-kali1-common/include/linux/types.h中声明。感谢大家。


不要在更新问题为“已解决”的同时,将答案添加到您自己的问题中。您也可以接受您自己的答案。 - alk
5个回答

36

我在Linux Mint上遇到了类似的错误。

致命错误:sys/types.h:没有那个文件或目录

使用以下方法解决了这个问题:

sudo apt install libc6-dev

1
谢谢,这也修复了Perl Net::AMQP::RabbitMQ模块的安装。 - Hugh Barnard
非常感谢您提供的EC2 ubuntu实例,这个修复非常完美,可以安装mod-wsgi - undefined

4
我建议您通过以下命令检查gcc是否在您的文件所在目录中寻找头文件:

gcc -I /path/to/directory/containing/header/files file.c

`gcc -print-prog-name=cc1` -v      # for c

感谢您的回答。#include "..."搜索从这里开始: #include <...>搜索从这里开始: /usr/lib/gcc/x86_64-linux-gnu/5/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed /usr/include - user3991417
这是你的整个makefile吗? - Allen
是的,这就是整个文件。 - user3991417
1
@ketazafor 不应该需要提供绝对路径,甚至不需要任何路径...每个gcc实例都应该知道该实例的头文件位置。这听起来像是一个配置错误。 - Jim Balter
我已经尝试了很多次,安装了gcc-multilib,但问题仍然存在。我不知道该怎么办(( - user3991417
显示剩余2条评论

2

非常抱歉,这是我的错,我在类型(type)上打了一个错字,并试图包含sys/types.h文件,但实际上并不需要,在我的情况下所有类型都已经在/usr/src/linux-headers-4.5.0-kali1-common/include/linux/types.h中声明。谢谢大家。


2

您可以通过以下方式解决此问题:

最初的回答:

sudo apt-get install libc6-dev-i386

1
你可以将types头文件添加到你的源代码中,从这里下载。

你说的“只需添加此文件”是什么意思?正如你所看到的,我已经尝试过将其包含进来了,而且你的文件中也没有定义ssize_t - user3991417
下载该文件并将其添加到您的项目目录中,然后尝试包含它。关于ssize_t,只需添加以下行:typedef unsigned int ssize_t; - Dr.Haimovitz

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