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
configure 옵션 설명
- –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를 호스트 시스템에 설치하므로 거의 확실하게 호스트 시스템을 사용 불가한 상태로 만듭니다. 따라서 다음 명령을 실행하기 전에 환경이 올바르게 설정1)되어 있고 자신이 root가 아닌지 다시 확인2)하세요.
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 패키지 구성"에 있습니다.