View on GitHub

富乎 · 地问


avatar
辗转探寻为富乎?《天问》无解向地问!

<<< 返回主页

glibc编译演示

1、为何要自己编译glibc

原因不一而足,但都是由实际需要引发的,总结起来无非就两大类:

  1. 学习、钻研源码。

  2. 做一些刺激的事——至于有哪些刺激的事,一般人我不告诉他。

2、找准对象

  1. 确定你的程序依赖于哪个libc

     $ ldd some_program
     	linux-gate.so.1 (0xf7f83000)
     	libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7f5c000)
     	libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7c00000)
     	/lib/ld-linux.so.2 (0xf7f85000)
    
  2. 确定这个libc的版本号:

     $ strings /lib/i386-linux-gnu/libc.so.6 | grep GLIBC | tail -n 1
     GNU C Library (Ubuntu GLIBC 2.35-0ubuntu3.1) stable release version 2.35.
    

3、下载源码包

4、编译(注:本文使用Ubuntu 22.04,x86_64系统。)

4.1 解压及创建必要的目录

以下命令仅作为示例:

$ tar -zxvf glibc-2.35.tar.gz
$ cd glibc-2.35 && mkdir .build && cd .build
$ mkdir ~/myglibc

4.2 运行配置脚本

4.3 安装缺失的依赖组件(无缺失则跳过)

4.4 编译

$ make -j $(grep -c processor /proc/cpuinfo)

4.5 验证

4.6 安装

$ make install

4.7 使用

$ export LD_LIBRARY_PATH=$HOME/myglibc:$LD_LIBRARY_PATH

此时再按前述说明,使用ldd命令查看目标程序所依赖的动态库, 即可看到已变成这个手动编译的库。

4.8 卸载

$ rm -r ~/myglibc/*