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 的相关文章

  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • GNU C 库中如何测试三角函数?

    我试图找出如何最好地编写科学和 或数学函数的单元测试 我搜索了 GNU C 库的源代码以进行单元测试sin and cos 功能并遇到了atest sincos c源文件 复制如下 可以发现here https sourceware org
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐

  • 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