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,
- 再用这套东东编译整个新系统
上一篇: PHP内核之探究内存管理与缓存机制
下一篇: GNU编译工具GCC