【问题标题】:What is the relation between Linux kernel and GNU C library?Linux内核和GNU C库有什么关系?
【发布时间】:2020-05-01 09:08:43
【问题描述】:

我们知道 Linux 内核是用 C 编写的。但它是否也调用了标准 C 函数,如 malloc() 或额外的函数,如 GNU C 库 (glibc) 提供的 mmap()?在那种情况下,这很奇怪,因为直接与硬件进行低级交互,例如内存管理,应该几乎总是内核的任务。那么,哪个依赖于另一个?哪个更基础/低级?

【问题讨论】:

  • 我认为有些是。所以我这么说的原因是因为内核依赖glibc是没有意义的。有很多讨论哪个 glibc 版本可以与哪个内核版本一起使用,但这并不意味着内核依赖于 glibc。我刚刚在 linux 源代码中快速搜索了一下,发现 malloc 是在几个地方定义的。有多少组装,是什么,我不知道。
  • “我还没有看到任何一个的源代码” - 那你为什么在这里提问?做一些研究,得出结论并询问不清楚的地方。顺便说一句,看看/lib/string.c(在那里你可以找到strlen()和朋友)和其他类似的文件——阅读cmets、git历史等。
  • 不,这绝对不清楚,它带有不尊重的味道,听起来像是“我没有时间,所以去弄清楚并挖掘代码而不是我”。来自WRITING THE PERFECT QUESTION“在提出问题之前,您已经找到了解决问题的方法,不是吗?Stack Overflow 并不是要取代基本的搜索技能。你听说过git clonegrep 这样的工具吗?
  • @apadana 为什么不呢?下载它的源代码是一个 5 分钟的任务。在源代码中查找您要查找的内容,现在需要更长的时间。
  • 没有人说你不应该问。问题是您至少需要自己搜索某些内容,而不是使用“”字段作为 Google 中的请求行。

标签: c linux linux-kernel glibc


【解决方案1】:

我们知道 Linux 内核是用 C 编写的。但是它是否也调用了标准的 C 函数,例如 malloc()

没有。但是,内核定义了类似的函数,如kmalloc。请注意,这不是库的一部分;它是内核本身的一部分。

或像 mmap() 这样的额外函数

不是mmap,而是内核中有a lot的内存管理函数。

哪些是由 GNU C 库 (glibc) 提供的?

绝对不是。内核从不使用 glibc。

那么,哪个依赖于另一个?

glibc 的某些部分依赖于内核。其他部分(如strcpy)与内核无关,也不依赖它。内核从不依赖 glibc。您可以在 Linux 上运行使用不同 libc(如“musl”)或根本不使用 libc 的程序。

【讨论】:

  • 谢谢。和 glibc is not listed 作为编译 Linux 内核的要求。
  • 非常直接和有用的答案
猜你喜欢
  • 1970-01-01
  • 2018-06-10
  • 2015-06-24
  • 1970-01-01
  • 2011-01-09
  • 2017-04-08
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
相关资源
最近更新 更多