리눅스/LFS

[LFS4] Glibc(GNU C Library) 빌드 : 시스템의 심장을 뛰게 해보자

sik13579 2026. 1. 27. 17:49

1. OS의 심장 Glibc

지난 포스팅에서 시스템의 '신경망'인 Linux API Headers를 깔았따면, 이번에는 그 신경망을 통해 실제로 명령을 전달하고 몸을 움직이게 할 심장, 즉 Glibc(GNU C Library)를 빌드할 차례입니다.

Glibc는 리눅스 시스템에서 가장 핵심적인 라이브러리입니다. 우리가 쓰는 거의 모든 C/C++ 프로그램은 이 녀석 없이는 화면에 글자 하나 출력하지 못하고, 메모리 한 바이트도 쓰지 못합니다. 특히 이번에는 32/64비트 모두를 아우르는 Multilib 환경이기에 설정이 더욱 까다로웠던것 같습니다.

 

2. Glibc 빌드 과정 

2.1 환경 설정

Glibc는 다른 빌드와 마찬가지로 소스 폴더와 빌드 폴더를 철저히 분리해야 합니다.
아래와 같은 옵션으로 크로스 컴파일러 기반의 라이브러리를 구축했습니다.

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=4.19               \
      --with-headers=$LFS/usr/include    \
      --enable-multilib                  \
      libc_cv_slibdir=/usr/lib
  • --enable-multilib : 32비트 하위 호환성을 위한 핵심 옵션입니다.
  • --host=$LFS_TGT : 우리가 만든 임시 툴체인을 사용하여 빌드하도록 강제합니다.
  • libc_cv-slibdir=/usr/lib : 라이브러리가 설치될 기본 경로를 명시적으로 잡아줍니다.

2.2 컴파일 및 설치

make
make DESTDIR=$LFS install

 

2.3 툴체인 무결성 검사

Glibc 설치가 끝났다면, 이제 만든 툴체인(Binutils + GCC + Glibc)이 호스트(Ubuntu)로부터 완전히 독립하여 작동하는지 반드시 확인해야 합니다. 이 검사를 통과하지 못하면, 이후의 모든 과정은 무의미 해지기때문입니다.

아래 명령어를 순서대로 입력해 봅시다. 이때, 테스트용 C파일을 생성하는 과정은 $LFS/sources로 이동하여 진행해 봅시다.

# 1. 간단한 테스트용 C 파일 생성
echo 'int main(){}' > dummy.c

# 2. 우리가 만든 컴파일러로 빌드 시도
$LFS_TGT-gcc dummy.c

# 3. 결과 파일(a.out)이 어떤 라이브러리 로더를 사용하는지 확인
readelf -l a.out | grep ': /tools'

 

만약 화면에 아래와 같은 경로가 출력된다면 성공한것입니다.

[Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2]
/tools/lib/...

 

2.4 뒷정리

성공하였다면, 다른 빌드떄와 마찬가지로, 소스 폴더를 지워 용량을 확보합시다.

cd $LFS/sources
rm -rf glibc-*

 

3. 결론 및 다음 단계

이제 리눅스 시스템의 기초 툴체인과 핵심 라이브러리가 맞물려 돌아가기 시작했습니다.

다음 포스팅에서는 C++ 프로그램을 돌리기 위한 핀수 요소, Libstdc++ 빌드 과정을 다뤄보겠습니다.