gcc和glibc

本文介绍了glibc作为GNU C运行库的角色及其提供的关键服务,包括字符串处理、信号管理等,并阐述了gcc作为编译器与glibc之间的相互依赖关系。

一、glibc是什么,以及与gcc的关系
glibc是什么,以及与gcc的关系?
glibc是gnu发布的libc库,也即c运行库。glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下,glibc对应这些功能有15个头文件:
(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,再用这套东东编译整个新系统,gcc编译不需要libc支持。
二、系统中默认的gcc一般安装在/bin目录下,头文件和库文件也在/include、/lib、/usr/include、/usr/lib目录下,当然,这里的头文件和库文件有很多,不是只有glib和它的15个头文件,通过系统的相关环境变量LD_LIBRARY_PATH指明了gcc的头文件和库文件的搜索目录。

如果需要安装新版本的gcc,则安装之后会在安装目录下出现/bin、/include、/lib等目录,需要重新修改环境变脸,使得新的gcc能找到这些新生产的头文件和库文件。

 

编译 GCC GLIBC 是构建自定义 Linux 开发环境的重要步骤,尤其是在为特定架构(如 ARM)或特定需求(如嵌入式系统)构建工具链时。以下是详细的编译步骤方法: ### ### 准备工作 在开始编译之前,确保系统中安装了必要的依赖项,例如 `make`、`gawk`、`flex`、`bison`、`gmp`、`mpfr`、`mpc` 等库工具。此外,建议在一个干净的工作目录中进行编译,以避免路径冲突。 ```bash mkdir -p /path/to/build && cd /path/to/build ``` ### ### 编译 GCC GCC(GNU Compiler Collection)是用于编译 C、C++ 等语言的工具集。GLIBC 依赖于 GCC 提供的运行时库支持。 1. **下载 GCC 源代码** 从 GNU 官方网站下载所需的 GCC 版本,例如: ```bash wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz tar -xzf gcc-11.2.0.tar.gz cd gcc-11.2.0 ``` 2. **安装依赖库** GCC 的某些版本依赖 GMP、MPFR MPC 等数学库。可以通过以下命令自动下载并安装这些库: ```bash ./contrib/download_prerequisites ``` 3. **配置 GCC** 创建一个独立的构建目录,并配置编译选项: ```bash mkdir -p ../build-gcc && cd ../build-gcc ../gcc-11.2.0/configure --prefix=/opt/toolchains/arm-linux-gnueabi \ --target=arm-linux-gnueabi --enable-languages=c,c++ --without-headers \ --with-newlib --disable-shared --enable-threads=posix --disable-multilib ``` 以上配置适用于交叉编译 ARM-Linux 工具链。根据目标平台的不同,可以调整 `--target` `--prefix` 参数。 4. **编译与安装** ```bash make all-gcc make install-gcc ``` ### ### 编译 GLIBC GLIBC(GNU C Library)是 Linux 系统的核心库之一,提供了标准 C 库函数的实现。 1. **下载 GLIBC 源代码** ```bash wget https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.gz tar -xzf glibc-2.34.tar.gz cd glibc-2.34 ``` 2. **配置 GLIBC** 创建独立的构建目录,并指定交叉编译工具链路径: ```bash mkdir -p ../build-glibc && cd ../build-glibc CC=arm-linux-gnueabi-gcc ../glibc-2.34/configure \ --host=arm-linux-gnueabi --build=x86_64-linux-gnu \ --prefix=/opt/toolchains/arm-linux-gnueabi/arm-linux-gnueabi/libc \ --enable-kernel=3.2.0 --with-headers=/opt/toolchains/arm-linux-gnueabi/arm-linux-gnueabi/include ``` 该配置适用于交叉编译环境,其中 `--host` 指定目标架构,`--prefix` 指定安装路径。 3. **编译与安装** ```bash make make install ``` ### ### 验证编译结果 编译完成后,可以使用如下命令验证生成的工具链是否正常工作: ```bash arm-linux-gnueabi-gcc -v ``` 如果输出显示 GCC 的版本信息,则说明编译成功。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值