Linux中的libc和glibc

2023-05-16

一、libc库

Linux平台提供的C标准库包括:

  • 一组头文件,定义了很多类型和宏,声明了很多库函数。这些头文件放在哪些目录下取决于不同的编译器,stdarg.h和stddef.h位于/usr/lib/gcc/i486-linux-gnu/4.3.2/include目录下,stdio.h、stdlib.h、time.h、math.h、assert.h位于/usr/include目录下。C99标准定义的头文件有24个,本书只介绍其中最基本、最常用的几个。

  • 一组库文件,提供了库函数的实现。大多数库函数在libc共享库中,有些库函数在另外的共享库中,例如数学函数在libm中。在第 4 节 “共享库”讲过,通常libc共享库是/lib/libc.so.6。

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

    1. <ctype.h>:包含用来测试某个特征字符的函数的函数原型,以及用来转换大小写字母的函数原型;
    2. <errno.h>:定义用来报告错误条件的宏;
    3. <float.h>:包含系统的浮点数大小限制;
    4. <math.h>:包含数学库函数的函数原型;
    5. <stddef.h>:包含执行某些计算 C 所用的常见的函数定义;
    6. <stdio.h>:包含标准输入输出库函数的函数原型,以及他们所用的信息;
    7. <stdlib.h>:包含数字转换到文本,以及文本转换到数字的函数原型,还有内存分配、随机数字以及其他实用函数的函数原型;
    8. <string.h>:包含字符串处理函数的函数原型;
    9. <time.h>:包含时间和日期操作的函数原型和类型;
    10. <stdarg.h>:包含函数原型和宏,用于处理未知数值和类型的函数的参数列表;
    11. <signal.h>:包含函数原型和宏,用于处理程序执行期间可能出现的各种条件;
    12. <setjmp.h>:包含可以绕过一般函数调用并返回序列的函数的原型,即非局部跳转;
    13. <locale.h>:包含函数原型和其他信息,使程序可以针对所运行的地区进行修改。
    14. 地区的表示方法可以使计算机系统处理不同的数据表达约定,如全世界的日期、时间、美元数和大数字;
    15. <assert.h>:包含宏和信息,用于进行诊断,帮助程序调试。
    上述库函数在其各种支持 C 语言的 IDE 中都是有的。 你要是使用fopen/memcpy等等这样标准C的函数,当然在链接时使用到标准C库(ANSI C),如果你使用了read/write这些glibc库实现的函数,肯定就在链接时使用到glibc库

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

    glibc下载地址:http://mirror.hust.edu.cn/gnu/

    glibc是linux下面c标准库的实现,即GNU C Library。glibc本身是GNU旗下的C标准库,后来逐渐成为了Linux的标准c库,而Linux下原来的标准c库Linux libc逐渐不再被维护。Linux下面的标准c库不仅有这一个,如uclibc(https://www.uclibc.org/)、klibc,以及上面被提到的Linux libc,但是glibc无疑是用得最多的。glibc在/lib目录下的.so文件为libc.so.6。


    查看当前系统的 glibc 版本的两种方法: 
    1.
    01 [root@Betty ~]# /lib/libc.so.6
    02 GNU C Library stable release version 2.5, by Roland McGrath et al.
    03 Copyright (C) 2006 Free Software Foundation, Inc.
    04 This is free software; see the source for copying conditions.
    05 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
    06 PARTICULAR PURPOSE.
    07 Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-52).
    08 Compiled on a Linux 2.6.9 system on 2013-01-08.
    09 Available extensions:
    10         The C stubs add-on version 2.1.2.
    11         crypt add-on version 2.1 by Michael Glad and others
    12         GNU Libidn by Simon Josefsson
    13         GNU libio by Per Bothner
    14         NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
    15         Native POSIX Threads Library by Ulrich Drepper et al
    16         BIND-8.2.3-T5B
    17         RT using linux kernel aio
    18 Thread-local storage support included.
    19 For bug reporting instructions, please see:
    20 <http://www.gnu.org/software/libc/bugs.html>.
    21 [root@Betty ~]#
    2. 
    1 [root@Betty ~]# ldd  --version
    2 ldd (GNU libc) 2.5
    3 Copyright (C) 2006 Free Software Foundation, Inc.
    4 This is free software; see the source for copying conditions.  There is NO
    5 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    6 Written by Roland McGrath and Ulrich Drepper.
    7 [root@Betty ~]#


    【官方说明】

    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. 

  • 
    具体使用了什么库,要看你调用的函数了~可能不会仅仅只包含一个库~
    
    Linux下,库的路径一般是:/lib,/usr/lib,/usr/local/lib等,这些路径一般会在/etc/ld.so.conf 中标记出来,如果需要添加特殊位置的库,可以把库的路径添加到/etc/ld.so.conf中去,并且执行ldconfig来使得新路径立即生效~   

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux中的libc和glibc 的相关文章

  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER

随机推荐

  • jupyter notebook 安装nbextension不显示问题

    2023年4月18日 更新 评论区一位老哥的方法 xff0c 不用下载mark js xff0c 复制一份源目录里的文件改名即可 xff0c 经测试 xff0c 有效 xff0c 评论已置顶 首先放一下安装nbextensions的步骤 如
  • Python对象序列化性能比较:pickle、json、msgpack

    目录 前言三种工具介绍PickleJsonMsgpack性能参考 xff08 由ChatGPT给出 xff09 实际测试测试条件测试结果 前言 最近在做毕设 xff0c 需要读取处理大量的数据 xff0c txt中文文本 xff0c 大概有
  • IRQL_NOT_LESS_OR_EUQAL,间歇性蓝屏,4800h笔记本,暗影精灵6,解决办法,蓝屏问题排查

    目录 前言机器配置蓝屏情况已测试方法及思路前期准备使用WinDbg分析蓝屏文件软件 系统排查 xff1a 驱动排查 xff1a 系统排查 硬件排查硬件检测硬件替换 送修 已知解决办法总结 前言 本文章所列出解决方法适用于AMD Ryzen
  • 单片机PWM输出原理与实践

    一 什么是PWM xff1f PWM xff08 Pulse Width Modulation xff09 脉冲宽度调制 xff0c 它是通过对一系列脉冲的宽度进行调制 xff0c 等效出所需要的波形 xff08 包含形状以及幅值 xff0
  • 数字IC/FPGA面试笔试准备(自用填坑中)

    文章目录 前言常见的IC问题数字电路基础问题Verilog amp SV 跨时钟域信号处理类CRG 同步与异步复位综合与时序分析类低功耗方法STA 静态时序分析 DC综合RTL设计 包含手撕代码 总线问题AXIAPBAHB 体系结构的问题R
  • 时序图工具哪家强?

    设计时序是基本功 xff0c 怎样才能高效的设计时序图呢 xff1f 下面是我搜集到的工具以及我目前在用的工具 xff0c 希望大家能找到最适合自己的工具 Visio 使用步骤 Visio时序图工具 xff0c 其中有一些做好的模具 xff
  • FIFO设计笔记(双口RAM、同步FIFO、异步FIFO)Verilog及仿真

    文章目录 0 前言0 1 FIFO0 2 FIFO与RAM 1 异步双口RAM1 1 原理1 2 Verilog代码1 3 tb仿真 2 FIFO设计前瞻知识2 1 格雷码2 1 1 二进制转格雷码Verilog代码tb仿真 2 1 2 格
  • el-table在行单击时获取行的index

    一 涉及参数及事件 参数说明类型类型说明row class name行的 className 的回调方法 xff0c 也可以使用字符串为所有行设置一个固定的 className Function row rowIndex String ro
  • 时序分析与时序约束知识总结

    文章目录 时序分析如何查看时序报告时序分析的分类和任务HOLD违例修复 xff1a SETUP违例修复 xff1a 时序违例的修复 时序约束约束的分类时序约束的作用SDF文件OCVPVT共同路径悲观效应 CPP setup time与hol
  • Ubuntu 遭遇 无法打开锁文件 /var/lib/dpkg/lock - open (13: 权限不够)解决方案:

    作者本人最近在自学linux xff0c 一是作为遇到的问题的笔记 xff0c 二是希望给遇到一样问题的同学一个解决方案 有三个解决方案 xff1a 一 xff0c 在终端输入 sudo passwd root 然后输入两次密码 再输入 s
  • VS error c4996: 'fopen': This function or variable may be unsafe 解决方案

    一 摘要 在调用图像处理函数 xff0c 或者文字处理函数的时候 xff0c 会出现类似下面这种报错 错误 C4996 39 fopen 39 This function or variable may be unsafe Consider
  • 解决word中无法粘贴问题(Ctrl+V失灵问题)

    1 问题描述 最近打开word xff0c 发现ctrl 43 v不管用了 xff0c 怎么回事呢 xff1f 昨天还好好的 xff0c 怎么突然不灵了呢 后来发现每次打开都会提示MathType的问题 xff0c 我想肯定是这个插件惹的祸
  • 解决“双系统删除其中一个,BIOS仍然有其启动项”问题

    1 打开win10下的磁盘管理工具 xff0c 按Windows键 43 X键就可以在弹出来的菜单中找到磁盘管理 xff0c 打开后找到你当时安装ubuntu的分区 xff0c 在哪个分区右击删除卷即可 2 刚才已经删除了Ubuntu的系统
  • Ubuntu | 你的内存不够啦:c++: internal compiler error: Killed (program cc1plus)

    1 问题描述 在开发板上编译opencv的时候报了一个错 c 43 43 internal compiler error Killed program cc1plus Please submit a full bug report 主要是在
  • 神经网络例程-梯度下降法更新权值

    以下代码来自Deep Learning for Computer Vision with Python第九章 一 梯度下降法 xff08 Gradient Decent xff09 import the necessary packages
  • BP神经网络拟合函数

    摘要 xff1a 采用BP神经网络 拟合目标函数 xff0c 并添加高斯随机噪声 xff0c 通过使用feedforwardnet 函数构建BP神经网络进行函数拟合 通过调试设定的参数及所使用的训练函数 xff0c 得出结论 xff1a B
  • 替换=(等于号)正则表达式

    public void test4 String expression 61 34 a 61 0 34 String aa 61 34 34 aa 61 expression replaceAll 34 61 gt lt 61 61 gt
  • 参数共享机制soft-share and hard-share【机器学习】

    先讲hard share 言外之意就是来硬的 实际上两个参数的hard share就退变成了一个参数 在实际计算过程中 xff0c 我们就可以使用相同的参数进行计算 参数更新后也保持相同 再说soft share 实际上这才是真的两个不同参
  • Vue知识点:==与===的异同点

    61 61 与 61 61 61 的区别 61 61 61 61 61 相同点两者均是用于比较判断相等情况 xff0c 返回boolean值不同点用于比较或判断两者是否相等 xff0c 比较时可以自动转换数据类型用于较为严格的比较 xff0
  • Linux中的libc和glibc

    一 libc库 Linux平台提供的C标准库包括 xff1a 一组头文件 xff0c 定义了很多类型和宏 xff0c 声明了很多库函数 这些头文件放在哪些目录下取决于不同的编译器 xff0c stdarg h和stddef h位于 usr