문서의 이전 판입니다!
Linux-6.7.4 API Headers | GCC-13.2.0의 Libstdc++ |
5.5. Glibc-2.39
Glibc 패키지에는 기본 C 라이브러리가 포함되어 있습니다. 이 라이브러리는 메모리 할당, 디렉터리 검색, 파일 열기 및 닫기, 파일 읽기 및 쓰기, 문자열 처리, 패턴 일치, 연산 등을 위한 기본 루틴을 제공합니다.
- 빌드 시간: 1.5 SBU
- 디스크 공간: 846 MB
5.5.1. 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
참고
위의 명령은 올바른 사용 방법입니다. ln 명령에는 여러 구문 버전이 있으므로 오류로 보이는 것을 보고하기 전에 info coreutils ln
및 ln(1)을 확인하시기 바랍니다.
일부 Glibc 프로그램은 런타임 데이터를 저장하기 위해 FHS와 호환되지 않는 /var/db
디렉터리를 사용합니다. 다음과 같이 패치를 적용하여 이러한 프로그램들이 런타임 데이터를 FHS 호환 위치에 저장하도록 하세요.
patch -Np1 -i ../glibc-2.39-fhs-1.patch
Glibc 문서에서는 전용 빌드 디렉터리에 Glibc를 빌드할 것을 권장합니다.
mkdir -v build
cd build
ldconfig 및 sln 유틸리티가 /usr/sbin
에 설치되도록 합니다.
echo "rootsbindir=/usr/sbin" > configparms
Glibc 컴파일을 준비합니다.
../configure \
--prefix=/usr \
--host=$LFS_TGT \
--build=$(../scripts/config.guess) \
--enable-kernel=4.19 \
--with-headers=$LFS/usr/include \
--disable-nscd \
libc_cv_slibdir=/usr/lib
설정 옵션 설명
- –host=$LFS_TGT, –build=$(../scripts/config.guess)
이 두 스위치는 Glibc의 빌드 시스템이$LFS/tools
의 크로스 링커와 크로스 컴파일러를 사용하여 크로스 컴파일되도록 구성하는 것입니다. - –enable-kernel=4.19
Glibc가 4.19 이상의 Linux 커널을 지원하여 라이브러리를 컴파일하도록 지시합니다. 이전 커널 작동에 대한 해결 방법은 활성화되지 않습니다. - –with-headers=$LFS/usr/include
Glibc가 $LFS/usr/include 디렉터리에 최근에 설치된 헤더를 기준으로 컴파일하여 커널에 어떤 기능이 있는지 정확히 파악하고 그에 따라 최적화할 수 있습니다. - libc_cv_slibdir=/usr/lib
이렇게 하면 64비트 시스템에서 라이브러리가 기본 /lib64 대신 /usr/lib에 설치됩니다. - –disable-nscd
더 이상 사용되지 않는 네임 서비스 캐시 데몬을 빌드하지 않습니다.
이 단계에서는 다음과 같은 경고가 표시될 수 있습니다.
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 패키지의 일부입니다.
참고
이 패키지가 “parallel make”로 빌드할 때 실패할 수 있다는 보고가 있었습니다. 이 경우 -j1
옵션을 사용하여 make 명령을 다시 실행하세요.
패키지를 컴파일합니다.
make
패키지를 설치합니다.
경고
LFS
가 올바르게 설정되지 않았고 권고에도 불구하고 root로 빌드하는 경우 다음 명령은 새로 빌드한 Glibc를 호스트 시스템에 설치하므로 거의 확실하게 사용할 수 없게 됩니다. 따라서 다음 명령을 실행하기 전에 환경이 올바르게 설정되어 있고 자신이 root가 아닌지 다시 확인1)하세요.
make DESTDIR=$LFS install
make install 옵션 설명
- DESTDIR=$LFS
DESTDIR
make 변수는 거의 모든 패키지에서 패키지가 설치될 위치를 정의하는 데 사용됩니다. 설정하지 않으면 기본값은 루트(/) 디렉터리입니다. 여기서는 패키지가 7.4절 "루트 환경으로 들어가기"의 루트 디렉터리가 될$LFS
에 설치되도록 지정합니다.
ldd
스크립트에서 실행 로더의 하드코딩된 경로를 수정합니다.
sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd
주의
이 시점에서 새 툴체인의 기본 기능(컴파일 및 연결)이 예상대로 작동하는지 확인해야 합니다. 점검을 수행하려면 다음 명령을 실행하세요.
echo 'int main(){}' | $LFS_TGT-gcc -xc -
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 a.out
참고
다음 장에서 패키지를 빌드하면 툴체인이 제대로 빌드되었는지 추가로 확인할 수 있습니다. 일부 패키지, 특히 Binutils-pass2 또는 GCC-pass2가 빌드에 실패하면 이전 Binutils, GCC 또는 Glibc 설치에 문제가 있음을 나타냅니다.
이 패키지에 대한 자세한 내용은 섹션 8.5.3, "Glibc의 내용"에 있습니다.