차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:12.1:036-gcc-13.2.0_-_pass_1 [2024/05/03 04:41] baecylinuxfromscratch:12.1:036-gcc-13.2.0_-_pass_1 [2024/06/16 23:00] (현재) – [5.3.1. Cross GCC 설치] baecy
줄 1: 줄 1:
-===== 5.3. GCC-13.2.0 - 1차 =====+^  Linux From Scratch - Version 12.1-systemd  ^^^ 
 +^  Chapter 5. Compiling a Cross-Toolchain  ^^^ 
 +|[[.:035-binutils-2.42_-_pass_1|이전]]  |  [[.:05-compiling_a_cross-toolchain|위로]] / [[.:12.1|처음으로]]  |  [[.:037-linux-6.7.4_api_headers|다음]]| 
 + 
 +|Binutils-2.42 - 1차  |  Linux-6.7.4 API Headers| 
 + 
 +---- 
 + 
 +====== 5.3. GCC-13.2.0 - 1차 =====
 GCC 패키지에는 C 컴파일러와 C++ 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다. GCC 패키지에는 C 컴파일러와 C++ 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다.
  
-대략적인 빌드 시간입니다: 3.8 SBU +  * **빌드 시간:** 3.8 SBU 
-필요한 디스크 공간: 4.1 GB+  * **디스크 공간:** 4.1 GB 
 ------ ------
-5.3.1. Cross GCC 설치 
-GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 결과 디렉터리의 이름을 변경하여 GCC 빌드 절차에서 자동으로 사용할 수 있도록 하세요: 
  
-[참고] 참고 +==== 5.3.1Cross GCC 설치 ====
-이 장에 대해 자주 오해하는 경우가 있습니다절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다(패키지 빌드 지침)먼저 소스 디렉토리에서 gcc-13.2.0 tarball을 추출한 다음 생성한 디렉토리로 변경합니다. 그런 다음 아래 지침을 진행해야 합니다.+
  
 +GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 디렉터리의 이름을 변경하여 GCC 빌드 중에 자동으로 사용할 수 있도록 하세요.
 +
 +<WRAP info round center 90%>
 +**참고** \\
 +이 장에 대해 자주 오해하는 경우가 있습니다. 절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다([[.:033-general_compilation_instructions|기본적인 컴파일 과정]]). 먼저 소스 디렉토리에서 gcc-13.2.0 tarball을 추출한 다음 생성한 디렉토리로 변경합니다. 그런 다음 아래 지침을 진행해야 합니다.
 +</WRAP>
 +
 +<code bash>
 tar -xf ../mpfr-4.2.1.tar.xz tar -xf ../mpfr-4.2.1.tar.xz
 mv -v mpfr-4.2.1 mpfr mv -v mpfr-4.2.1 mpfr
줄 17: 줄 32:
 tar -xf ../mpc-1.3.1.tar.gz tar -xf ../mpc-1.3.1.tar.gz
 mv -v mpc-1.3.1 mpc mv -v mpc-1.3.1 mpc
-x86_64 호스트에서는 64비트 라이브러리의 기본 디렉터리 이름을 "lib"로 설정합니다:+</code>
  
-케이스 $(uname -m) in+x86_64 호트에서는 64비트 라이브러리의 기본 디렉터리 이름을 "lib"로 사용하도록 설정합니다. 
 + 
 +<code bash> 
 +case $(uname -m) in
   x86_64)   x86_64)
-    sed -e '/m64=/s/lib64/lib/' \.+    sed -e '/m64=/s/lib64/lib/' \
         -i.orig gcc/config/i386/t-linux64         -i.orig gcc/config/i386/t-linux64
  ;;  ;;
 esac esac
-GCC 문서에서는 전용 빌드 디렉터리에 GCC를 빌드할 것을 권장합니다:+</code>
  
-mkdir -v 빌드 +GCC 문서에서는 별도의 디렉터리에 GCC를 빌드할 것을 권장합니다.
-cd 빌드 +
-컴파일을 위해 GCC를 준비합니다:+
  
-../configure \ +<code bash> 
-    --target=$LFS_TGT \ +mkdir -v build 
-    --prefix=$LFS/tools \ +cd       build 
-    --with-glibc-version=2.39 \. +</code>
-    --with-sysroot=$LFS \. +
-    --with-newlib \ +
-    --without-headers \ +
-    --enable-default-pie \ +
-    --enable-default-ssp \ +
-    --disable-nls \ +
-    --disable-shared \ +
-    --disable-multilib \ +
-    --disable-threads \ +
-    --disable-libatomic \ +
-    --disable-libgomp \ +
-    --disable-libquadmath \. +
-    --disable-libssp \ +
-    --disable-libvtv \ +
-    --disable-libstdcxx \. +
-    --enable-languages=c,c++ +
-구성 옵션의 의미+
  
---with-glibc-version=2.39 +GCC 컴파일을 준비합니다.
-이 옵션은 대상에서 사용할 Glibc 버전을 지정합니다. pass1 GCC로 컴파일된 모든 것이 호스트 배포판의 libc와 분리된 루트 환경에서 실행되므로 호스트 배포판의 libc와는 관련이 없습니다.+
  
---with-newlib +<code bash> 
-아직 작동하는 C 라이브러리를 사용할 수 없으므로 libgcc를 빌드할 때 inhibit_libc 상수가 정의되도록 합니다. 이렇게 하면 libc 지원이 필요한 모든 코드의 컴파일이 방지됩니다.+../configure                  \ 
 +    --target=$LFS_TGT         \ 
 +    --prefix=$LFS/tools       \ 
 +    --with-glibc-version=2.39 \ 
 +    --with-sysroot=$LFS       \ 
 +    --with-newlib             \ 
 +    --without-headers         \ 
 +    --enable-default-pie      \ 
 +    --enable-default-ssp      \ 
 +    --disable-nls             \ 
 +    --disable-shared          \ 
 +    --disable-multilib        \ 
 +    --disable-threads         \ 
 +    --disable-libatomic       \ 
 +    --disable-libgomp         \ 
 +    --disable-libquadmath     \ 
 +    --disable-libssp          \ 
 +    --disable-libvtv          \ 
 +    --disable-libstdcxx       \ 
 +    --enable-languages=c,c++ 
 +</code>
  
---헤더 없이 +=== configure 옵션 설명 ===
-완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 스위치는 GCC가 이러한 헤더를 찾지 않도록 합니다.+
  
---enable-default-pie 및 --enable-default-ssp +  * //**--with-glibc-version=2.39**// \\ 대상에서 사용할 Glibc 버전을 지정합니다. GCC 1차로 컴파일된 모든 것이 호스트 배포판의 libc와 분리된 //chroot// 환경에서 실행되므로 호스트 배포판의 libc 버전과는 관련이 없습니다. 
-이 스위치를 사용하면 GCC가 기본적으로 일부 보안 기능이 강화된 프로그램을 컴파일할 수 있습니다(자세한 내용은 8장의 PIE 및 SSP에 대한 메모에서 확인할 수 있습니다). 컴파일러는 임시 실행 파일만 생성하므로 이 단계에서는 꼭 필요한 것은 아닙니다. 하지만 임시 패키지를 가능한 한 최종 패키지에 가깝게 만드는 것이 더 깔끔합니다.+  * //**--with-newlib**// \\ 아직 작동하는 C 라이브러리를 사용할 수 없으므로 libgcc를 빌드할 때 inhibit_libc 상수가 정의되도록 합니다. 이렇게 하면 libc 지원이 필요한 모든 코드의 컴파일이 방지됩니다. 
 +  * //**--without-headers**// \\ 완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 스위치는 GCC가 이러한 헤더를 찾지 않도록 합니다. 
 +  * //**--enable-default-pie**// 및 //**--enable-default-ssp**// \\ GCC가 기본적으로 일부 보안 기능이 강화된 프로그램을 컴파일할 수 있습니다(자세한 내용은 8장의 [[.:098-gcc-13.2.0#configure 옵션 설명 
 +|PIE 및 SSP에 대한 메모]]에서 확인할 수 있습니다). 컴파일러는 임시 실행 파일만 생성하므로 이 단계에서는 꼭 필요한 것은 아닙니다. 하지만 임시 패키지를 가능한 한 최종 패키지에 가깝게 만드는 것이 더 깔끔합니다. 
 +  * //**--disable-shared**// \\ GCC가 내부 라이브러리를 정적으로 연결하도록 합니다. 공유 라이브러리에는 대상 시스템에 아직 설치되지 않은 Glibc가 필요하기 때문에 이 기능이 필요합니다. 
 +  * //**--disable-multilib**// \\ x86_64에서 LFS는 멀티라이브 구성을 지원하지 않습니다. 이 스위치는 x86에는 무해합니다. 
 +  * //**--disable-threads**//, //**--disable-libatomic**//, //**--disable-libgomp**//, //**--disable-libquadmath**//, //**--disable-libssp**//, //**--disable-libvtv**//, //**--disable-libstdcxx**// \\ 각각 threading, libatomic, libgomp, libquadmath, libssp, libvtv 및 C++ 표준 라이브러리에 대한 지원을 비활성화합니다. 이러한 기능은 크로스 컴파일러를 빌드할 때 컴파일에 실패할 수 있으며 임시 libc를 크로스 컴파일하는 작업에는 필요하지 않습니다. 
 +  * //**--enable-languages=c,c++**// \\ 이 옵션은 C와 C++ 컴파일러만 빌드하도록 합니다. 현재 필요한 언어는 이 두 가지뿐입니다.
  
---disable-shared +GCC를 컴파일합니다.
-이 스위치는 GCC가 내부 라이브러리를 정적으로 연결하도록 합니다. 공유 라이브러리에는 대상 시스템에 아직 설치되지 않은 Glibc가 필요하기 때문에 이 기능이 필요합니다. +
- +
---disable-multilib +
-x86_64에서 LFS는 멀티라이브 구성을 지원하지 않습니다. 이 스위치는 x86에는 무해합니다. +
- +
---disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx +
-이 스위치는 각각 스레딩, libatomic, libgomp, libquadmath, libssp, libvtv 및 C++ 표준 라이브러리에 대한 지원을 비활성화합니다. 이러한 기능은 크로스 컴파일러를 빌드할 때 컴파일에 실패할 수 있으며 임시 libc를 크로스 컴파일하는 작업에는 필요하지 않습니다. +
- +
---enable-languages=c,c++ +
-이 옵션은 C와 C++ 컴파일러만 빌드하도록 합니다. 현재 필요한 언어는 이 두 가지뿐입니다. +
- +
-실행하여 GCC를 컴파일합니다:+
  
 +<code bash>
 make make
-패키지를 설치합니다:+</code>
  
 +패키지를 설치합니다.
 +
 +<code bash>
 make install make install
-이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 limits.h에는 해당 시스템 limits.h 헤더(이 경우 $LFS/usr/include/limits.h)가 포함됩니다. 그러나 이 GCC 빌드 시점에는 $LFS/usr/include/limits.h가 존재하지 않으므로 방금 설치한 내부 헤더는 부분적인 독립 파일이며 시스템 헤더의 확장 기능을 포함하지 않습니다. 이 정도면 Glibc를 빌드하는 데 충분하지만 나중에 전체 내부 헤더가 필요합니다. 일반적인 상황에서 GCC 빌드 시스템이 수행하는 것과 동일한 명령을 사용하여 내부 헤더의 전체 버전을 생성하세요:+</code> 
 + 
 +이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 ''limits.h''에는 해당 시스템 ''limits.h'' 헤더(이 경우 ''$LFS/usr/include/limits.h'')가 포함됩니다. 그러나 이 GCC 빌드 시점에는 ''$LFS/usr/include/limits.h''가 존재하지 않으므로 방금 설치한 내부 헤더는 부분적인 파일이며 시스템 헤더의 확장 기능을 포함하지 않습니다. 이 정도면 Glibc를 빌드하는 데 충분하지만 나중에 전체 내부 헤더가 필요합니다. 일반적인 상황에서 GCC 빌드 시스템이 수행하는 것과 동일한 명령을 사용하여 내부 헤더의 전체 버전을 생성합니다.
  
-[참고] 참고 +<WRAP info round center 90%> 
-아래 명령은 역따옴표와 $() 구문이라는 두 가지 방법을 사용한 중첩 명령 대체의 예를 보여줍니다. 두 대체 방법에 대해 동일한 방법을 사용하여 다시 작성할 수도 있지만, 두 가지 방법을 혼합하여 사용할 수 있음을 보여주기 위해 이러한 방식으로 표시했습니다. 일반적으로 $() 방법을 선호합니다.+**참고** \\ 
 +아래 명령은 ''역따옴표''와 ''$()'' 구문두 가지 방법을 사용하여 중첩 명령 대체의 예를 보여줍니다. 두 대체 방법에 대해 동일한 방법을 사용하여 작성할 수도 있지만, 두 가지 방법을 혼합하여 사용할 수 있음을 보여주기 위해 이러한 방식으로 표시했습니다. 일반적으로 ''$()'' 방법을 선호합니다. 
 +</WRAP>
  
 +<code bash>
 cd .. cd ..
 cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h   `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include/limits.h
-이 패키지의 상세한 내용은 8.28.2 "GCC의 구성"에 있습니다.+</code>
  
 +-----
  
 +이 패키지의 상세한 내용은 [[.:098-gcc-13.2.0#8.28.2 GCC 패키지 구성|8.28.2. "GCC 패키지 구성"]]에 있습니다.
  • linuxfromscratch/12.1/036-gcc-13.2.0_-_pass_1.1714711317.txt.gz
  • 마지막으로 수정됨: 2024/05/03 04:41
  • 저자 baecy