Skip to content

Compile Glibc

取得原始碼

可以從 ftp.gnu.org 下載 glibc 的原始碼

wget https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.xz
x glibc-2.29.tar.xz

編譯

cd glibc-2.29 && mkdir build && cd build
CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -w" \
  CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -w" \
  ../configure --prefix=/path/to/install
make -j$(nproc) && make -j$(nproc) install
cd glibc-2.29 && mkdir build32 && cd build32
CC="gcc -m32"
  CXX="g++ -m32" \
  CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -w" \
  CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -w" \
  ../configure --prefix=/path/to/install --host=i686-linux-gnu
make -j$(nproc) && make -j$(nproc) install

-j 多個程序並行編譯

-w

-w 的作用是關掉所有 warning messages

使用

隨便編譯一個範例程式,看一下他的 process maps 就會看到原本的 libc 和 ld 被換成我們編譯的版本了

gcc test.c -o test -Wl,-dynamic-linker /path/to/install/lib/ld-2.29.so
-Wl,-dynamic-linker

-Wl,xxx 的作用是把參數 xxx 傳給 linker