linuxfromscratch:12.1:038-glibc-2.39

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:12.1:038-glibc-2.39 [2024/05/10 18:02] – [5.5.1. Glibc 설치] baecylinuxfromscratch:12.1:038-glibc-2.39 [2024/06/14 16:52] (현재) baecy
줄 1: 줄 1:
-====== 5.5. Glibc-2.39 =======+^  Linux From Scratch - Version 12.1-systemd  ^^^ 
 +^  Chapter 5. Compiling a Cross-Toolchain  ^^^ 
 +|[[.:037-linux-6.7.4_api_headers|이전]]  |  [[.:05-compiling_a_cross-toolchain|위로]] / [[.:12.1|처음으로]]  |  [[.:039-libstdc++_from_gcc-13.2.0|다음]]| 
 + 
 +|Linux-6.7.4 API Headers  |  GCC-13.2.0의 Libstdc++| 
 + 
 +---- 
 + 
 +===== 5.5. Glibc-2.39 ====== 
 Glibc 패키지에는 기본 C 라이브러리가 포함되어 있습니다. 이 라이브러리는 메모리 할당, 디렉터리 검색, 파일 열기 및 닫기, 파일 읽기 및 쓰기, 문자열 처리, 패턴 일치, 연산 등을 위한 기본 루틴을 제공합니다. Glibc 패키지에는 기본 C 라이브러리가 포함되어 있습니다. 이 라이브러리는 메모리 할당, 디렉터리 검색, 파일 열기 및 닫기, 파일 읽기 및 쓰기, 문자열 처리, 패턴 일치, 연산 등을 위한 기본 루틴을 제공합니다.
  
-**대략적인 빌드 시간입니다:** 1.5 SBU +  * **빌드 시간:** 1.5 SBU  
-**필요한 디스크 공간:** 846 MB+  **디스크 공간:** 846 MB
  
 ----- -----
  
-===== 5.5.1. Glibc 설치 ===== +==== 5.5.1. Glibc 설치 ==== 
-먼저 LSB 준수를 위한 심볼릭 링크를 생성합니다. 또한 x86_64의 경우 동적 라이브러리 로더가 제대로 작동하는 데 필요한 호환성 심볼릭 링크를 생성합니다: + 
-<code lang=bash>+먼저 LSB 준수를 위한 심볼릭 링크를 생성합니다. 또한 x86_64의 경우 동적 라이브러리 로더가 제대로 작동하는 데 필요한 호환성 심볼릭 링크를 생성합니다
 + 
 +<code bash>
 case $(uname -m) in case $(uname -m) in
-    i?86) ln -sfv ld-linux.so.2 $LFS/lib/ld-lsb.so.3+    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     x86_64) ln -sfv ../lib/ld-linux-x86-64.so.2 $LFS/lib64
줄 18: 줄 29:
 esac esac
 </code> </code>
 +
 <WRAP info center round 90%> <WRAP info center round 90%>
 **참고** \\  **참고** \\ 
-위의 명령은 올바니다. ln 명령에는 여러 구문 버전이 있으므로 오류로 보이는 것을 보고하기 전에 ''info coreutils ln'' 및 [[https://man.archlinux.org/man/ln.1|ln(1)]]을 확인하시기 바랍니다.+위의 명령은 올바른 사용 방법입니다. **ln** 명령에는 여러 구문 버전이 있으므로 오류로 보이는 것을 보고하기 전에 ''info coreutils ln'' 및 [[https://man.archlinux.org/man/ln.1|ln(1)]]을 확인하시기 바랍니다.
 </WRAP> </WRAP>
-일부 Glibc 프로그램은 런타임 데이터를 저장하기 위해 FHS와 호환되지 않는 ''/var/db'' 디렉터리를 사용합니다. 다음 패치를 적용하여 이러한 프로그램이 런타임 데이터를 FHS 호환 위치에 저장하도록 하세요: + 
-<code lang=bash>patch -Np1 -i ../glibc-2.39-fhs-1.patch</code> +일부 Glibc 프로그램은 런타임 데이터를 저장하기 위해 FHS와 호환되지 않는 ''/var/db'' 디렉터리를 사용합니다. 다음과 같이 패치를 적용하여 이러한 프로그램이 런타임 데이터를 FHS 호환 위치에 저장하도록 하세요
-Glibc 문서에서는 전용 빌드 디렉터리에 Glibc를 빌드할 것을 권장합니다: + 
-<code lang=bash>+<code bash> 
 +patch -Np1 -i ../glibc-2.39-fhs-1.patch 
 +</code> 
 + 
 +Glibc 문서에서는 전용 빌드 디렉터리에 Glibc를 빌드할 것을 권장합니다
 + 
 +<code bash>
 mkdir -v build mkdir -v build
-cd build+cd       build
 </code> </code>
-''ldconfig'' 및 ''sln'' 유틸리티가 ''/usr/sbin''에 설치되어 있는지 확인합니다: 
  
-<code lang=bash>echo "rootsbindir=/usr/sbin" > configparms</code> +**ldconfig** 및 **sln** 유틸리티가 ''/usr/sbin''에 설치되도록 합니다. 
-다음으로 컴파일을 위해 Glibc를 준비합니다: + 
-<code lang=bash> +<code bash> 
-../configure \ +echo "rootsbindir=/usr/sbin" > configparms 
-      --prefix=/usr \ +</code> 
-      --host=$LFS_TGT \+ 
 +Glibc 컴파일을 준비합니다
 + 
 +<code bash> 
 +../configure                             
 +      --prefix=/usr                      
 +      --host=$LFS_TGT                    \
       --build=$(../scripts/config.guess) \       --build=$(../scripts/config.guess) \
-      --enable-kernel=4.19 \ +      --enable-kernel=4.19               
-      --with-headers=$LFS/usr/include \ +      --with-headers=$LFS/usr/include    
-      --disable-nscd \+      --disable-nscd                     \
       libc_cv_slibdir=/usr/lib       libc_cv_slibdir=/usr/lib
 </code> </code>
-==== 구성 옵션의 의미 ==== 
-  * //--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 옵션 설명 === 
-<code> + 
-configure: 경고+  * //**--host=$LFS_TGT**//, //**--build=$(../scripts/config.guess)**// \\ 이 두 스위치는  Glibc의 빌드 시스템이 ''$LFS/tools''의 크로스 링커와 크로스 컴파일러를 사용하여 크로스 컴파일되도록 구성하는 것입니다. 
-*** 이 보조 프로그램이 누락되었거나 +  * //**--enable-kernel=4.19**// \\ Glibc가 4.19 이상의 Linux 커널을 지원하여 라이브러리를 컴파일하도록 지시합니다. 이전 커널 작동에 대한 해결 방법은 활성화되지 않습니다. 
-*** 호환되지 않는 버전: msgfmt +  * //**--with-headers=$LFS/usr/include**// \\ Glibc가 $LFS/usr/include 디렉터리에 최근에 설치된 헤더를 기준으로 컴파일하여 커널에 어떤 기능이 있는지 정확히 파악하고 그에 따라 최적화할 수 있습니다. 
-*** 일부 기능이 비활성화됩니다+  * //**libc_cv_slibdir=/usr/lib**// \\ 64비트 시스템에서 라이브러리가 /lib64 대신 /usr/lib에 설치됩니다. 
-*** 설치 파일에서 필요한 버전을 확인하세요. +  * //**--disable-nscd**// \\ 더 이상 사용되지 않는 네임 서비스 캐시 데몬을 빌드하지 않습니다. 
-</code> + 
-누락되었거나 호환되지 않는 msgfmt 프로그램은 일반적으로 무해합니다. 이 msgfmt 프로그램은 호스트 배포에서 제공해야 하는 Gettext 패키지의 일부입니다.+이 단계에서는 다음과 같은 경고가 표시될 수 있습니다
 + 
 +<code cmdout=1-5
 +configure: WARNING
 +*** These auxiliary programs are missing or 
 +*** incompatible versions: msgfmt 
 +*** some features will be disabled
 +*** Check the INSTALL file for required versions.</code> 
 + 
 +누락되었거나 호환되지 않는 **msgfmt** 프로그램은 일반적으로 무해합니다. 이 **msgfmt** 프로그램은 호스트 배포에서 제공하는 Gettext 패키지의 일부입니다. 
 <WRAP info center round 90%> <WRAP info center round 90%>
 **참고** \\  **참고** \\ 
-이 패키지가 "병렬 메이크"로 빌드할 때 실패할 수 있다는 보고가 있었습니다. 이 경우 -j1 옵션을 사용하여 make 명령을 다시 실행하세요.+이 패키지가 "parallel make"로 빌드할 때 실패할 수 있다는 보고가 있었습니다. 이 경우 ''-j1'' 옵션을 사용하여 make 명령을 다시 실행하세요.
 </WRAP> </WRAP>
-패키지를 컴파일합니다: + 
-<code lang=bash>make</code>+패키지를 컴파일합니다
 + 
 +<code bash> 
 +make 
 +</code> 
 패키지를 설치합니다. 패키지를 설치합니다.
 +
 <WRAP alert round center 90%> <WRAP alert round center 90%>
 **경고** \\ **경고** \\
-''LFS''가 올바르게 설정되지 않았고 권장 사항에도 불구하고 //root//로 빌드하는 경우 다음 명령은 새로 빌드한 Glibc를 호스트 시스템에 설치하므로 거의 확실하게 사용할 수 없게 됩니다. 따라서 다음 명령을 실행하기 전에 환경이 올바르게 설정되어 있고 자신이 //root//가 아닌지 다시 확인하세요.+''LFS''가 올바르게 설정되지 않았고 권에도 불구하고 //root//로 빌드하는 경우 다음 명령은 새로 빌드한 Glibc를 호스트 시스템에 설치하므로 거의 확실하게 호스트 시스템을 사용 불가한 상태로 만듭니다. 따라서 다음 명령을 실행하기 전에 환경이 올바르게 설정((echo $LFS))되어 있고 자신이 //root//가 아닌지 다시 확인((echo $LFS && id -un))하세요.
 </WRAP> </WRAP>
-<code lang=bash>make DESTDIR=$LFS install</code> 
-=== make install 옵션의 의미입니다: === 
-  * //DESTDIR=$LFS// \\ ''DESTDIR''make 변수는 거의 모든 패키지에서 패키지가 설치될 위치를 정의하는 데 사용됩니다. 설정하지 않으면 기본값은 루트(/) 디렉터리입니다. 여기서는 패키지가 [[.:061-entering_the_chroot_environment|7.4절 "루트 환경으로 들어가기"]]의 루트 디렉터리가 될 ''$LFS'' 에 설치되도록 지정합니다. 
  
-''ldd'' 스크립트에서 실행 로더의 하드코딩된 경로를 수정합니다:+<code bash> 
 +make DESTDIR=$LFS install 
 +</code> 
 + 
 +=== make install 옵션 설명 === 
 + 
 +  * //DESTDIR=$LFS// \\ ''DESTDIR'' make 변수는 거의 모든 패키지에서 패키지가 설치될 위치를 정의하는 데 사용됩니다. 설정하지 않으면 기본값은 루트(/) 디렉터리입니다. 패키지를 [[.:061-entering_the_chroot_environment|7.4절 "루트 환경으로 들어가기"]]에서 루트 디렉터리가 될 ''$LFS''에 설치되도록 지정합니다. 
 + 
 +''ldd'' 스크립트에 하드코딩되어 있는 실행 로더의 경로를 수정합니다
 + 
 +<code bash> 
 +sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd 
 +</code>
  
-<code lang=bash>sed '/RTLDLIST=/s@/usr@@g' -i $LFS/usr/bin/ldd</code> 
 <WRAP alert center round 90%> <WRAP alert center round 90%>
 **주의** \\ **주의** \\
-이 시점에서 새 툴체인의 기본 기능(컴파일 및 연결)이 예상대로 작동하는지 확인해야 합니다. 정상 점검을 수행하려면 //root//로 음 명령을 실행하세요:+이 시점에서 새 툴체인의 기본 기능(컴파일 및 연결)이 예상대로 작동하는지 확인해야 합니다. 다음과 같이 점검합니.
  
-<code lang=bash> +<code bash> 
-echo 'int main(){}' | $LFS_TGT-gcc -xc -.+echo 'int main(){}' | $LFS_TGT-gcc -xc -
 readelf -l a.out | grep ld-linux readelf -l a.out | grep ld-linux
 </code> </code>
-모든 것이 올바르게 작동하면 오류가 없어야 하며 마지막 명령의 출력은 다음과 같은 형식이 됩니다: 
  
-<code>[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</code> +모든 것이 올바르게 작동하면 오류가 없어야 하며 마지막 명령의 출력은 다음과 같습니다.
-32비트 컴퓨터의 경우 인터프리터 름은 ''lib/ld-linux.so.2''가 니다.+
  
-출력이 위와 다르거나 전혀 출력되지 않는다면 문제가 있는 것입니다단계를 조사하고 역추적하여 문제가 있는 위치를 찾아서 해결하세요. 계속하기 전에 이 문제를 해결해야 합니다.+<code cmdout=1> 
 +[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</code>
  
-모든 문제가 해결되면 테스트 파일을 정니다:+32비트 컴퓨터의 경우 인터프터 이름은 ''lib/ld-linux.so.2''가 됩니다.
  
-<code lang=bash>rm -v a.out</code>+출력이 위와 다르거나 전혀 출력되지 않는다면 문제가 있는 것입니다. 각 단계를 조사하고 역추적하여 문제를 찾아서 해결하세요. 더 진행하기 전에 반드시 이 문제를 해결해야 합니다. 
 + 
 +모든 문제가 해결되면 테스트 파일을 정리합니다. 
 +<code bash> 
 +rm -v a.out 
 +</code>
 </WRAP> </WRAP>
 +
 <WRAP info center round 90%> <WRAP info center round 90%>
 **참고** \\ **참고** \\
 다음 장에서 패키지를 빌드하면 툴체인이 제대로 빌드되었는지 추가로 확인할 수 있습니다. 일부 패키지, 특히 **Binutils-pass2** 또는 **GCC-pass2**가 빌드에 실패하면 이전 Binutils, GCC 또는 Glibc 설치에 문제가 있음을 나타냅니다. 다음 장에서 패키지를 빌드하면 툴체인이 제대로 빌드되었는지 추가로 확인할 수 있습니다. 일부 패키지, 특히 **Binutils-pass2** 또는 **GCC-pass2**가 빌드에 실패하면 이전 Binutils, GCC 또는 Glibc 설치에 문제가 있음을 나타냅니다.
 </WRAP> </WRAP>
 +
 ----- -----
-이 패키지에 대한 자세한 내용은 [[.:075-glibc-2.39|섹션 8.5.3, "Glibc의 내용"]]에 있습니다. 
  
 +이 패키지에 대한 자세한 내용은 [[.:075-glibc-2.39#8.5.3. Glibc 패키지 구성|8.5.3, "Glibc 패키지 구성"]]에 있습니다.
  • linuxfromscratch/12.1/038-glibc-2.39.1715364175.txt.gz
  • 마지막으로 수정됨: 2024/05/10 18:02
  • 저자 baecy