c - 使用 makefile 时,找到 linux header ,但是当调用 header 中的函数时,它说它们是隐式声明的

标签 c linux makefile kernel

我正在编写一个内核模块并且我已经开始研究套接字。我已经能够包含其他 linux 头文件,使用它们的功能,并且 makefile 会很好。当我包含 linux/socket.h 时,编译器能够找到该文件,但如果我调用 socket()connect() 等,它会说它们是隐式声明。我该如何解决这个问题?

我已经使用 cat 查看文件以确保它是正确的,确实如此。我试过对位置进行硬编码

/usr/src/linux-headers-4.18.0-17-generic/linux/socket.h

我也尝试过使用 linux-headers-4.18.0-17 的 socket.h,但这也不起作用。

错误之一: 错误:函数“套接字”的隐式声明;您指的是 'sget' 吗? [-Werror=implicit-function--声明]

最佳答案

因为它不是socket(),而是sys_socket(),您还需要包含系统调用的头文件。那个只包含结构和常量。函数本身的头文件是 linux/syscalls.h

关于c - 使用 makefile 时,找到 linux header ,但是当调用 header 中的函数时,它说它们是隐式声明的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840257/

相关文章:

c - 有没有办法从 `FILE*` 获取文件名?

c - 在数组 C 中的每个偶数后添加一个 0 字符

linux - 我怎样才能让 GNU 'find' 在目录树中找到文件名的*第一个*实例?

linux - 查找命令不起作用

twitter-bootstrap - 编译 Twitter bootstrap 3 文档(如何)?

c - 设备驱动程序 Hello world 的 make 文件出错

c++ - Makefile:根据 CC/CXX/FC 值更改编译器标志

c - GDB - 为没有符号的二进制文件提供源代码路径

c - 删除 ("<filename>");删除文件 : Permission denied 时出错

linux - 为 "cd ../"设置绑定(bind) key