GLIBC 笔记 | 安装与使用
前言安装使用Segmentation faultPatchELF参考资料 前言如果你不太了解 glibc,请不要随便升级,请不要随便升级,请不要随便升级!重要的事情说三遍

前言安装使用Segmentation faultPatchELF参考资料
前言如果你不太了解 glibc,请不要随便升级,请不要随便升级,请不要随便升级!重要的事情说三遍!!!
Glibc 是 GNU 发布的 libc 库,即 c 运行库。glibc 是 linux 系统中最底层的 api,几乎其它任何运行库都会依赖于 glibc。glibc 除了封装 linux 操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中,其 C 函式库发展史点出了 GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的 C 函式库,是 GNU/Linux 演进的一个重要里程碑。
由于 Glibc 是一个比较底层的依赖库,为了 CentOS 6 安全,你可能不太想冒着风险直接升级,特别是对于一些运行这其他业务的服务器。前车之鉴就在这里!
一次”胆战心惊”的真实集群运维经历
安装CentOS 6.5,最高支持 glibc 的版本为2.12,而有些程序要 2.14 或者更高版本,所以需要升级或者额外安装。
$ strings /lib64/libc.so.6 |grep GLIBC_GLIBC_2.2.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_PRIVATE常规的安装方法如下:
$ mkdir ~/glibc_install; cd ~/glibc_install $ wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz$ tar zxvf glibc-2.14.tar.gz$ cd glibc-2.14$ mkdir build$ cd build$ ../configure --prefix=/opt/glibc-2.14$ make -j4$ sudo make install$ export LD_LIBRARY_PATH="/opt/glibc-2.14/lib:$LD_LIBRARY_PATH"
安装过程中如果出现以下 LD_LIBRARY_PATH shouldn’t contain the current directory when building glibc 提示,可以按照下面的方法处理:
configure: WARNING:*** These auxiliary programs are missing or incompatible versions: makeinfo*** some features will be disabled.*** Check the INSTALL file for required versions.checking LD_LIBRARY_PATH variable... contains current directoryconfigure: error:*** LD_LIBRARY_PATH shouldn't contain the current directory when*** building glibc. Please change the environment variable*** and run configure again.
先 echo $LD_LIBRARY_PATH 先看一下结果;确保结果中不包含了 “:” 的结尾!unset LD_LIBRARY_PATHexport LD_LIBRARY_PATH=/path/to/prefix/dir/lib
使用
Segmentation fault很多人喜欢在手动安装完以后,通过设置 LD_LIBRARY_PATH 环境,然后进行使用,但是这样的用法很容易会导致 Segmentation fault (core dumped) 的异常。折中的解决方法如下:
/path/to/newglibc/lib/ld-linux-x86-64.so.2 /path/to/your_app如:/path/to/newglibc/lib/ld-linux-x86-64.so.2 /bin/ls
PatchELF在同一台服务器上安装并使用多个版本的 GLIBC,StackOverflow 上很多人都在推荐使用 PatchELF 这个工具,PatchELF 是一个用于修改现有 ELF 可执行文件和库的简单实用程序。
ELF: 可执行与可链接格式(Executable and Linkable Format),常被称为 ELF 格式。
StackOverflow 上关于在同一台服务器上安装并使用多个版本的 GLIBC 的讨论可以参考:
PatchELF 是一个开源的工具,GitHub 链接:https://github.com/NixOS/patchelf,用法可以参考:
参考资料
Haidar Ali,《Multiple glibc on a Single Linux Machine》,Baeldung on Linux名本无名,《找不到动态链接库?》,知乎专栏Unix & Linux,《如何在 CentOS 6.5 中将 glibc 更新到 2.14》,QA Stack試毅-思伟,《Linux 下安装 GLIBC_2.15》,云+社区 - 腾讯云caosiyang,《SCL 基本用法》,一个单板滑雪爱好者的编程笔记zzhongcy,《CentOS/RHEL 开发环境之 devtoolset》,CSDN博客 - 专业IT技术发表平台