Linux与GNU、glibc之间存在哪些关系?

linux

1个回答

写回答

Ren10

2026-01-16 10:54

+ 关注

linux
linux

直接回答题主的疑问如下:1. linux的C库可视为第三方提供的,GNU并不隶属于linux社区。glibc在理论上能够部署到其他操作系统,不过当前GNU的重心基本都放在linux上,所以二者看起来结合得很紧密。实际上,不用glibc也能兼容linux系统调用。把编译器改成clang/llvm,将C库链接环境换成musl,就可以完全脱离glibc。关于系统调用的格式,linux源码中有文档,可自行查阅,如果只想查看系统调用号,可看这个链接。2. 在裸机上部署linux内核的话,显然无法让linux运行起来,因为没有glibc,而且编译的内核也不包含glibc。自己编译后能运行,是因为是在已经包含glibc的环境下进行的编译,所以不需要再次编译glibc。绝大多数人只是编译和升级内核,用户态的东西都是现成的,做发行版的企业都已经打包好了。linux内核有与之匹配的glibc版本,可以到GNU网站查询,它不随linux发布。确切地说,内核做内核的事,GNU做GNU的事,虽然双方会互相协助,但并非严格绑定。如果要探究二者的历史,GNU社区的出现比linux内核要早,GNU社区才是开源软件的最大推动者。后来有了linux之后,GNU开始支持linux,但二者并非同步发展。linux内核的初始版本并没有glibc的支持。GNU社区在寻找合适的操作系统,linux在寻找合适的C库,然后双方发现都是开源/免费软件,于是一拍即合走到了一起。前面提到,二者并非完全绑定,glibc可以用于freeBSD,linux也可以使用musl作为C库。只是现在制作linux发行版的企业,都默认采用linux + glibc的方案。如果有能力的话,可以自己编写一个操作系统,并且在系统调用层面兼容glibc,这样就得到一个用户态与linux相似,甚至能运行一些基本linux应用的操作系统,这个操作系统甚至可以是闭源的(只要保证用户态部分开源即可)。同样,如果能力很强,按照linux系统调用的格式去创建一个C运行库也没问题,甚至可以做出闭源的C库,然后在linux内核上运行(前提是要精心设计链接部分的代码)。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号