欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

glibc、libc+build-essential是啥

程序员文章站 2022-03-08 08:19:37
...

build-essential是啥

  • ubuntu上编译程序,默认有gcc的,但没有g++。
  • 自己安装g++也可以,不过它涉及到一些依赖库,有点麻烦。

  • 有个叫build-essential的包,里面包含很多开发必要的软件包

  • sudo apt-get install build-essential,

  • 这个包里面有:

dpkg-dev fakeroot g++ g+±4.6 libalgorithm-diff-perl
libalgorithm-diff-xs-perl libalgorithm-merge-perl
libdpkg-perl libstdc++6-4.6-dev libtimedate-perl

第二个类似的

  • Ubuntu缺省没提供C/C++的编译环境,因此还需手动安装
  • 如果单独安装gcc及g++麻烦
  • Ubuntu提供了一个build-essential软件包。
  • 查看该软件包的依赖关系:

[email protected]:~$ apt-cache depends build-essential
build-essential
|Depends: libc6-dev
Depends:
libc6-dev
Depends: gcc
Depends: g++
Depends: make
make-guile
Depends: dpkg-dev12345678910

[email protected]:~$ apt-cache depends build-essential
build-essential
 |Depends: libc6-dev
  Depends: <libc-dev>
    libc6-dev
  Depends: gcc
  Depends: g++
  Depends: make
    make:i386
  Depends: dpkg-dev
  Conflicts: build-essential:i386
  • 安装该软件包,编译c/c++所需的软件包也都会被安装。
  • 因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可

Ubuntu下查看glibc版本

  • ldd --version,
  • 输出
    ldd (Ubuntu EGLIBC 2.19-0ubuntu6.6) 2.19
    Copyright © 2014 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 A PARTICULAR PURPOSE.
    Written by Roland McGrath and Ulrich Drepper.

  • getconf GNU_LIBC_VERSION
  • glibc 2.19
  • 由上可知glibc的版本为2.19.。

  • 通过输出ldd的版本号,间接输出了glibc的版本;
  • 很直接的方法得到glibc的版本

这个答案

  • libc指C开发包的函数库,包括头文件和基本C库libc.a
  • 最初的libc由发明C那些人写,
  • 随着C移植到不同平台,libc也有了多版本,
  • 可能是为了兼容吧,
    • 很多头文件和libc.a的文件名都没有变(很好的传统)。

  • 现在libc泛指C函数库,
    • 用的最广,功能最强的是GNU LibC,glibc,
    • 各发行版Linux用的就是glibc

  • libc的 动态库版本叫 做 libc.so
    • 通常/usr/lib/libc.so
  • glibc的libc.so其实不是.so文件,而是一个ld Script,
  • 这没关系,gnu ld 会正确处理

  • 还有其他版本的libc,如newlibc,用在嵌入系统

glibc是啥

  • GNU发布的libc库,即c运行库
  • linux系统最底层的api,其它任何运行库都依赖glibc
  • 除封装linux操作系统所提供的系统服务外
    • 本身也提供许多其它一些必要功能服务的实现。
  • glibc囊括几乎所有的 UNIX 通行的标准
    • 就像其他的 UNIX 系统一样,
    • 其内含的档案群分散于系统的树状目录结构中,
    • 像一个支架一般撑起整个操作系统。
  • 在 GNU/Linux 系统中
    • 其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,
    • 用 glibc 作为系统的C函式库,
    • 是GNU/Linux演进的里程碑

  • 一种按照LGPL许可协议发布的,*的,公开源代码的,方便从网络下载的C的编译程序。
  • GNU C运行期库,是一种C函数库,是程序运行时使用到的一些API集合,一般已预先编译好,二进制代码形式存在Linux类系统中,
  • GNU C运行期库通常作为GNU C编译程序的一个部分发布。

  • 最初*软件基金会(FSF)为其GNU操作系统所写,
  • 当前最主要的应用是配合Linux内核,
    • 成为GNU/Linux操作系统一个重要的组成

glibc和libc

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

glibc是什么,以及与gcc的关系?

  • 是gnu发布的libc库,即c运行库。
  • 是linux系统中最底层api(应用程序开发接口),
    • 其它任何的运行库都会倚赖glibc
  • glibc除了封装linux操作系统所提供的系统服务外,
    • 本身也提供许多其它一些必要功能服务的实现
      (1)string,字符串处理
      (2)signal,信号处理
      (3)dlfcn,管理共享库的动态加载
      (4)direct,文件目录操作
      (5)elf,共享库的动态加载器,也即interpreter
      (6)iconv,不同字符集的编码转换
      (7)inet,socket接口的实现
      (8)intl,国际化,也即gettext的实现
      (9)io
      (10)linuxthreads
      (11)locale,本地化
      (12)login,虚拟终端设备的管理,及系统的安全访问
      (13)malloc,动态内存的分配与管理
      (14)nis
      (15)stdlib,其它基本功能

  • gcc 是编译器,Linux 下所有程序(包括内核)都是 gcc 编译的,libc 也是
  • gcc 和 libc 是互相依赖的两个软件
    • 它们合作的方式类似 Linux 系统的 “自举”
  • 先在一个可以运行的带有老 libc 和 gcc的系统上,
    • 用老 gcc 编译出一个新版本的 gcc + 老 libc,
    • 再用这个新 gcc 编译出一个新 gcc + 新libc,
    • 再用这套东东编译整个新系统
相关标签: GNU