c - 头文件在linux中是如何组织的

标签 c linux

在linux上,很多文件夹下都有socket.h,如下图。

  1. 如何决定 asm 文件夹、linux 和 bits 下存储的内容。我假设 sys 下的所有内容都只是 libc

  2. gcc 以什么顺序解析头文件。例如,它会从 sys 中选择 socket.h,然后是 linux,然后是 sys,然后是 bits 等等?

/usr/include/sys/socket.h, (libc使用)

/usr/include/linux/socket.h

/usr/include/asm/socket.h

/usr/include/asm-generic/socket.h

/usr/include/bits/socket.h(libc 包含)

最佳答案

1) 裸#include <socket.h>在默认的 Linux 配置下不起作用:

fatal error: socket.h: No such file or directory

这意味着您还必须在 gcc 搜索路径中指定目录的子目录:#include <sys/socket.h> (相对于 /usr/include ,所以绝对路径是 /usr/include/sys/socket.h )。要确定要使用的头文件,请查看 man socket .

一般/usr/include/sys包含最终用户 header ,而 bits/asm包含由 gcc 和其他 header 使用的中间 header 。 /usr/include/linux包含特定于 Linux 的 header (通常与内核共享,因此它是对可能对用户空间编程有用的内核结构的描述)。

Libc 头文件通常分散在整个/usr/include 中。 Gcc 特定的 header 通常位于 /usr/include/x86_64-linux-gnu 等位置等等。

2) 这里:http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html您可以找到有关 GCC 搜索路径的更多信息。没有搜索任何猜测的目录,只是 /usr/include以及链接列表中的其他人。

关于c - 头文件在linux中是如何组织的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13749486/

相关文章:

c++ - 将 MFRC522 UID 十六进制字节转换为可打印的十进制

c++ - 解决堆栈溢出错误的问题

在 Linux 中使用命令行编译 F# 程序

c++ - 在位流中扫描位模式的最快方法

c++ - 将文本转换为 HPGL(绘图仪) vector 坐标

linux - 无法通过 libusb 传输数据

Python 代码可以在 Win 上运行,但不能在 Linux 上运行

linux - 命令行日志文件中时间的分箱直方图

命令行错误

c - 为什么数据类型的最大值显示出荒谬的高值?