在进行Linux开发不可避免的要调用一些系统的API,我们经常开到的概念有诸如glibc、libc和glib等等。那么这些系统库之前的关系是什么样的呢?下面小编带大家了解一下这些库之前的共同点和差异,希望对以后的编程开发提供帮助。

glibc 和 libc的关系

glibc 和 libc 都是 Linux 下的C函数库。libc是Linux下的ANSI C函数库;glibc 是 Linux 下的 GUN C函数库。

那么ANSI C和GNU C有什么区别呢?

ANSI C函数库是基本的C语言函数库,包含了C语言最基本的库函数。这个库可以根据头文件划分为 15 个部分,其中包括:

  1. :包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
  2. :定义用来报告错误条件的宏;
  3. :包含系统的浮点数大小限制;
  4. :包含数学库函数的函数原型;
  5. :包含执行某些计算 C 所用的常见的函数定义;
  6. :包含标准输入输出库函数的函数原型,以及他们所用的信息;
  7. :包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
  8. :包含字符串处理函数的函数原型;
  9. :包含时间和日期操作的函数原型和类型;
  10. :包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
  11. :包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
  12. :包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
  13. :包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
  14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
  15. :包含宏和信息,用于进行诊断,帮助程序调试。

GNU C函数库是一种类似于第三方插件的东西。由于 Linux 是用C语言写的,所以Linux的一些操作是用C语言实现的。因此,GUN 组织开发了一个 C 语言的库以便让我们更好的利用 C 语言开发基于 Linux 操作系统的程序。不过现在的不同的 Linux 的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了。

查看当前系统的 glibc 版本的方法:

通过执行libc.so.6

切换到libc.so.6所在的目录,执行如下命令。

[root@itworld123]# ./libc.so.6GNU C Library (GNU libc) stable release version 2.28.Copyright (C) 2018 Free Software Foundation, Inc.This is free software; see the source for copying conditions.There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR APARTICULAR PURPOSE.Compiled by GNU CC version 8.2.1 20180905 (Red Hat 8.2.1-3).libc ABIs: UNIQUE IFUNC ABSOLUTEFor bug reporting instructions, please see:.

执行ldd命令

[root@itworld123]# ldd --versionldd (GNU libc) 2.12Copyright (C) 2010 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.由 Roland McGrath 和 Ulrich Drepper 编写。

glibc 和 glib的关系

错误观点:GLib前面有个"g",所以认为glib是GNU的东东;同时认为glibc是GLib 的一个子集。其实,glib和glibc 基本上没有太大联系,可能唯一的共同点就是,其都是C编程需要调用的库而已。

GLib是Gtk+库和Gnome的基础。GLib是一个跨平台的、用C语言编写的五个底层库的集合,为GNOME所使用。其支持的平台包括Linux、Unix和Windows 等。GLib为许多标准的、常用的C语言结构提供了相应的替代物。GLib中包含了近二十种实用功能,从简单的字符处理到初学者很难理解的XML解析功能。

官方说明

关于Glib的官方说明:

GLib is a general-purpose utility library, which provides many useful data types, macros, type conversions, string utilities, file utilities, a main loop abstraction, and so on. It works on many UNIX-like platforms, Windows, OS/2 and BeOS. GLib is released under the GNU Library General Public License (GNU LGPL).

The general policy of GLib is that all functions are invisibly threadsafe with the exception of data structure manipulation functions, where, if you have two threads manipulating the same data structure, they must use a lock to synchronize their operation.

GLib is the low-level core library that forms the basis for projects such as GTK+ and GNOME. It provides data structure handling for C, portability wrappers, and interfaces for such runtime functionality as an event loop, threads, dynamic loading, and an object system.

关于Glibc的官方说明

Overview:

Any Unix-like operating system needs a C library: the library which defines the ``system calls'' and other basic facilities such as open, malloc, printf, exit...

The GNU C Library is used as the C library in the GNU systems and most systems with the Linux kernel.

Project Goals:

The GNU C Library is primarily designed to be a portable and high performance C library. It follows all relevant standards including ISO C11 and POSIX.1-2008. It is also internationalized and has one of the most complete internationalization interfaces known.

History:

The history of Unix and various standards determine much of the interface of the C library. In general the GNU C Library supports the ISO C and POSIX standards. We also try to support the features of popular Unix variants (including BSD and System V) when those do not conflict with the standards. Different compatibility modes (selectable when you compile an application) allow the peaceful coexistence of compatibility support for different varieties of Unix.

其他说法

libc 实际上是一个泛指。凡是符合实现了C标准规定的内容,都是一种 libc 。

glibc是GNU组织对libc的一种实现。它是unix/linux的根基之一。

微软也有自己的libc实现,叫msvcrt 。

嵌入式行业里还常用uClibc ,是一个迷你版的libc 。

glibc版本查看_Linux开发必知内容整理 | libc、glibc和glib的关系相关推荐

  1. Web开发必知的八种隔离级别

    Web开发必知的八种隔离级别 转自:http://www.infoq.com/cn/articles/eight-isolation-levels ACID性质是数据库理论中的奠基石,它定义了一个理论 ...

  2. linux gcc 与 glibc 的关系 glibc版本查看

    glibc是什么,以及与gcc的关系? glibc是gnu发布的libc库,也即c运行库.glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc.g ...

  3. linux后台开发必知的io优化知识总结

    尊重原创版权: https://www.hanzhangsy.com/hot/105435.html 更多内容参考: https://www.hanzhangsy.com/ linux后台开发必知的i ...

  4. 《安卓开发必知的50个技巧》读书笔记

    记录一下看<安卓开发必知的50个技巧>认为实用的一下技巧. include标签使用注意事项 假设想在标签中覆盖被包括布局所指定的不论什么android:layout_*属性,必须在标签中同 ...

  5. Spring Boot + Redis 实现接口幂等性 | 分布式开发必知!

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:http://tinyurl.com/y5k2sx5t >>阿里云8月最新 ...

  6. 嵌入式linux技能,学IT技能 学嵌入式Linux必知内容

    嵌入式培训所学嵌入式Linux必知知识内容,谁的青春不迷茫?在人生成长的道路上,每个人都有彷徨和踟蹰的阶段.在未来,你可能都不知道该怎么办?如何才能找到人生正确的目标?在IT的职业技能学习过程中,嵌入 ...

  7. linux服务器jdk版本查看_linux如何查看jdk版本

    一.安装Java环境开发工具软件JDK1.从Java官方网站下载相应的JDK版本jdk-6u33-linux-i586.bin2.安装jdk-6u33-linux-i586.bin#chmoda+xj ...

  8. Web开发必知必会,如何使用 Letsencrypt 为网站签发 HTTPS 证书提供安全支持

    在做 Web 开发中,对网站内容的基本安全加密就是使用 HTTPS,并且在一些重视安全性的软件中,HTTPS 必不可少,微信开发中配置的域名强制使用 HTTPS,parse-dashboard 的配置 ...

  9. glibc版本查看_[译] 写一个简单的内存分配器(替换glibc中的malloc函数)

    本文介绍如何用c语言实现一个简单的内存分配器,可替换glibc中的 malloc(), calloc(), realloc(), free(). 这是一篇入门级别的文章,所以不会介绍所有的细节. 代码 ...

最新文章

  1. java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
  2. 安卓当下最流行的吸顶效果的实现(转)
  3. 支持向量回归 svr
  4. 20100422.C#.const VS readonly
  5. vue+element-ui的分页完整版
  6. 新时达二代操作器刷写数据线_布袋除尘器的脉冲振动特点及安装操作
  7. double类型计算
  8. BeetleX.Redis基础操作和对象格式
  9. c++ 11之 lambda表达式的使用
  10. 联想笔记本驱动升级,指纹识别不了不成功解决方法
  11. 小坑远程shell工具
  12. 常用分子对接软件简介
  13. 什么高大填空四个字动人_什么发亮填空四字词语
  14. 计算机网络安装,计算机网络系统安装操作指南.pdf
  15. 智能名片如何在会场营销落地
  16. 使用Adobe Acrobat编辑PDF,实现文件签名
  17. 写一个登录界面连接数据库,判断用户名和密码
  18. 80x86 汇编语言,大写变小写,小写变大写,数字原样输出
  19. 结合实战暴利营销13种技巧方式总有一个万里挑一适合你!!!
  20. Arduino 语法参考

热门文章

  1. [leetcode]从中序与后序/前序遍历序列构造二叉树
  2. Python之旅Day8 socket网络编程
  3. NodeJs系列二:你好,世界
  4. 2010年 Web的五项技术和五个趋势
  5. 老赵书托(1):写在前面
  6. .NET Framework 2.0新增特性总结
  7. 動態修改SiteMapPath路徑
  8. redis创建像mysql表结构_Redis数据结构列表实现
  9. android 监测bug上传到服务器,基于Android 错误信息捕获发送至服务器的详解
  10. QT示例:基于TCP点对点Socket通讯