glibc、libc+build-essential是啥

文章目录

  • build-essential是啥
  • 第二个类似的
  • Ubuntu下查看glibc版本
  • 这个答案
  • glibc是啥
  • glibc和libc
  • glibc是什么,以及与gcc的关系?

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软件包。
  • 查看该软件包的依赖关系:

y@ubuntu:~$ apt-cache depends build-essential
build-essential
|Depends: libc6-dev
Depends:
libc6-dev
Depends: gcc
Depends: g++
Depends: make
make-guile
Depends: dpkg-dev12345678910

ztz123@ubuntu:~$ 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+linux下工具)