# Glibc 2.33

Glibc 패키지는 주 C 라이브러리를 제공합니다. 이 라이브러리는 메모리 할당, 디렉토리 검색, 파일 열기/닫기, 파일 읽기/쓰기, 문자열 처리, 패턴 매칭, 산수 등에 필요한 기본 작업을 제공합니다.

평균 빌드 시간 필요한 디스크 공간
4.2 SBU 770MB

# Glibc의 설치

먼저, LSB 호환을 위해 심볼릭 링크를 생성하십시오. 추가로, x86_64에서는 동적 라이브러리 로더의 작동을 위한 호롼성 심볼릭 링크를 생성하십시오.

case $(uname -m) in
    i?86)   ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3
    ;;
    x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
            ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64/ld-lsb-x86-64.so.3
    ;;
esac

일부 Glibc 프로그램은 런타임 데이터를 저장하기 위해 FHS 비호환 /var/db 디렉토리를 사용합니다. 아래 패치를 적용해서 그러한 프로그램이 FHS 호환 위치에 런타임 데이터를 저장하도록 하십시오:

patch -Np1 -i ../glibc-2.33-fs-1.patch

Glibc 문서는 Glibc를 별도의 빌드 디렉토리에서 빌드하는 것을 권장합니다.

mkdir build
cd build

Glibc의 컴파일을 준비하십시오:

../configure                             \
      --prefix=/usr                      \
      --host=$LFS_TGT                    \
      --build=$(../scripts/config.guess) \
      --enable-kernel=3.2                \
      --with-headers=$LFS/usr/include    \
      libc_cv_slibdir=/lib

configure 옵션의 의미

  • --host=$LFS_TGT, --build=$(../scripts/config.guess)

    두 옵션을 같이 사용하여 Glibc의 빌드 시스템이 $LFS/tools의 크로스 링커와 크로스 컴파일러를 사용하여 크로스 컴파일되도록 구성합니다.

  • --enable-kernel=3.2

    이는 Glibc가 리눅스 커널 3.2 이상이 필요한 라이브러리를 컴파일하도록 합니다. 더 오래된 커널에 대한 차선책은 사용하지 않습니다.

  • --with-headers=$LFS/usr/include

    이는 Glibc가 방금 $LFS/usr/include에 설치된 헤더를 사용하여 컴파일하도록 하여, 커널의 기능을 확인하고 이에 따라 빌드를 최적화합니다.

  • libc_cv_slibdir=/lib

    이는 64비트 컴퓨터에서 라이브러리가 기본 /lib64 대신 /lib에 설치되도록 합니다.

  • libc_cv_include_x86_isa_level=no

    이는 Glibc 라이브러리에서 "X86 ISA 필요" 속성을 끕니다. CFLAGS에서 -march 옵션을 사용할 때 Glibc-2.33이 정상적으로 빌드되지 않는 경우의 차선책으로 사용하십시오.

이 단계에서 아래 경고가 뜰 수 있습니다:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

msgfmt 프로그램이 없거나 호환되지 않는 것은 일반적으로 무해합니다. msgfmt 프로그램은 호스트 배포판이 제공하는 Gettext 프로그램의 일부입니다.

참고

이 패키지를 병렬로 빌드할 때 실패한다는 보고가 있었습니다. 이 경우, -j1 옵션으로 make 명령어를 다시 실행하십시오.

패키지를 컴파일하십시오:

make

경고

LFS가 맞게 설정되어있지 않고 root 유저로 빌드하고 있다면, 다음 명령어는 새로 빌드한 glibc를 호스트 시스템에 설치하고 사용할 수 없도록 할 수 있습니다. 그러므로 아래 명령어를 실행하기 전에 작업 환경이 적절히 설정되었는지 확인하십시오.

make DESTDIR=$LFS install

make install 옵션의 의미

  • DESTDIR=$LFS

    DESTDIR make 변수는 대부분의 패키지에서 패키지가 설치될 위치를 지정하기 위해 사용됩니다. 이것이 설정되지 않았다면, 이는 기본적으로 루트(/) 디렉토리입니다. 여기서 패키지는 7.4장 - chroot 환경 진입부터 루트 디렉토리가 될 $LFS에 설치되도록 명시합니다.

주의

여기에서 잠깐 멈추고 새 툴체인의 기본적인 기능(컴파일, 링크)가 제대로 동작하는 지 확인하는 것이 좋습니다. 이를 확인하려면, 아래 명령어를 실행하십시오:

echo 'int main(){}' > dummy.c
$LFS_TGT-gcc dummy.c
readelf -l a.out | grep '/ld-linux'

모든 것이 맞게 동작한다면, 에러가 없고 마지막 명령어의 출력은 이런 형식이어야 합니다:

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

32비트 컴퓨터의 경우 인터프리터 이름은 /lib/ld-linux.so.2입니다.

출력이 이처럼 나오지 않거나 출력이 없다면, 뭔가가 잘못된 것입니다. 단계를 조사하고 역추적하여 문제의 원인을 찾아 해결하십시오. 계속하기 전에 이 문제를 해결해야 합니다.

모든 것이 제대로 동작한다면, 테스트 파일을 삭제하십시오:

rm -v dummy.c a.out

참고

다음 장에서의 패키지의 빌드는 툴체인이 잘 빌드되었다는 것에 대한 추가적인 검사로도 작동합니다. 만약 일부 패키지(특히 binutils pass 2나 gcc pass 2)의 빌드가 실패하면, 이는 기존 Binutils, GCC, Glibc 설치에서 뭔가가 잘못되었다는 것을 의미합니다.

크로스 툴체인이 완성되었기 때문에, limits.h 헤더의 설치를 완료하십시오. 진행하려면 GCC 개발자가 제공하는 유틸리티를 실행하십시오:

$LFS/tools/libexec/gcc/$LFS_TGT/10.2.0/install-tools/mkheaders

이 패키지의 자세한 내용은 여기를 참고하십시오.

Last Updated: 5/3/2021, 11:08:41 AM