차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
linuxfromscratch:12.1:036-gcc-13.2.0_-_pass_1 [2024/05/27 12:25] – 바깥 편집 127.0.0.1 | linuxfromscratch:12.1:036-gcc-13.2.0_-_pass_1 [2024/06/16 23:00] (현재) – [5.3.1. Cross GCC 설치] baecy | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | ^ Linux From Scratch - Version 12.1-systemd | ||
+ | ^ Chapter 5. Compiling a Cross-Toolchain | ||
+ | |[[.: | ||
+ | |||
+ | |Binutils-2.42 - 1차 | Linux-6.7.4 API Headers| | ||
+ | |||
+ | ---- | ||
+ | |||
====== 5.3. GCC-13.2.0 - 1차 ====== | ====== 5.3. GCC-13.2.0 - 1차 ====== | ||
GCC 패키지에는 C 컴파일러와 C++ 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다. | GCC 패키지에는 C 컴파일러와 C++ 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다. | ||
- | **대략적인 | + | * **빌드 시간:** 3.8 SBU |
- | **필요한 | + | |
------ | ------ | ||
줄 11: | 줄 19: | ||
GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 디렉터리의 이름을 변경하여 GCC 빌드 중에 자동으로 사용할 수 있도록 하세요. | GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 디렉터리의 이름을 변경하여 GCC 빌드 중에 자동으로 사용할 수 있도록 하세요. | ||
+ | |||
<WRAP info round center 90%> | <WRAP info round center 90%> | ||
- | **참고** | + | **참고** |
- | 이 장에 대해 자주 오해하는 경우가 있습니다. 절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다(패키지 빌드 지침). 먼저 소스 디렉토리에서 gcc-13.2.0 tarball을 추출한 다음 생성한 디렉토리로 변경합니다. 그런 다음 아래 지침을 진행해야 합니다. | + | 이 장에 대해 자주 오해하는 경우가 있습니다. 절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다([[.: |
</ | </ | ||
- | < | + | |
+ | <code bash> | ||
tar -xf ../ | tar -xf ../ | ||
mv -v mpfr-4.2.1 mpfr | mv -v mpfr-4.2.1 mpfr | ||
줄 23: | 줄 33: | ||
mv -v mpc-1.3.1 mpc | mv -v mpc-1.3.1 mpc | ||
</ | </ | ||
- | x86_64 호스트에서는 64비트 라이브러리의 기본 디렉터리 이름을 " | + | |
- | < | + | x86_64 호스트에서는 64비트 라이브러리의 기본 디렉터리 이름을 " |
+ | |||
+ | <code bash> | ||
case $(uname -m) in | case $(uname -m) in | ||
x86_64) | x86_64) | ||
줄 32: | 줄 44: | ||
esac | esac | ||
</ | </ | ||
- | GCC 문서에서는 | + | |
- | < | + | GCC 문서에서는 |
+ | |||
+ | <code bash> | ||
mkdir -v build | mkdir -v build | ||
- | cd build | + | cd |
</ | </ | ||
- | 컴파일을 | + | |
- | < | + | GCC 컴파일을 준비합니다. |
- | ../ | + | |
- | --target=$LFS_TGT \ | + | <code bash> |
- | --prefix=$LFS/ | + | ../ |
+ | --target=$LFS_TGT | ||
+ | --prefix=$LFS/ | ||
--with-glibc-version=2.39 \ | --with-glibc-version=2.39 \ | ||
- | --with-sysroot=$LFS \ | + | --with-sysroot=$LFS |
- | --with-newlib \ | + | --with-newlib |
- | --without-headers \ | + | --without-headers |
- | --enable-default-pie \ | + | --enable-default-pie |
- | --enable-default-ssp \ | + | --enable-default-ssp |
- | --disable-nls \ | + | --disable-nls |
- | --disable-shared \ | + | --disable-shared |
- | --disable-multilib \ | + | --disable-multilib |
- | --disable-threads \ | + | --disable-threads |
- | --disable-libatomic \ | + | --disable-libatomic |
- | --disable-libgomp \ | + | --disable-libgomp |
- | --disable-libquadmath \ | + | --disable-libquadmath |
- | --disable-libssp \ | + | --disable-libssp |
- | --disable-libvtv \ | + | --disable-libvtv |
- | --disable-libstdcxx \ | + | --disable-libstdcxx |
--enable-languages=c, | --enable-languages=c, | ||
</ | </ | ||
- | **구성 | + | === configure |
- | * **--with-glibc-version=2.39** \\ 이 옵션은 | + | |
- | * **--with-newlib** \\ 아직 작동하는 C 라이브러리를 사용할 수 없으므로 libgcc를 빌드할 때 inhibit_libc 상수가 정의되도록 합니다. 이렇게 하면 libc 지원이 필요한 모든 코드의 컴파일이 방지됩니다. | + | * //**--with-glibc-version=2.39**// \\ 대상에서 사용할 Glibc 버전을 지정합니다. GCC 1차로 컴파일된 모든 것이 호스트 배포판의 libc와 분리된 |
- | * **--without-headers** \\ 완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 스위치는 GCC가 이러한 헤더를 찾지 않도록 합니다. | + | * //**--with-newlib**// \\ 아직 작동하는 C 라이브러리를 사용할 수 없으므로 libgcc를 빌드할 때 inhibit_libc 상수가 정의되도록 합니다. 이렇게 하면 libc 지원이 필요한 모든 코드의 컴파일이 방지됩니다. |
- | * **--enable-default-pie 및 --enable-default-ssp** \\ 이 스위치를 사용하면 | + | * //**--without-headers**// \\ 완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 스위치는 GCC가 이러한 헤더를 찾지 않도록 합니다. |
- | * **--disable-shared** \\ 이 스위치는 | + | * //**--enable-default-pie**// 및 //**--enable-default-ssp**// \\ GCC가 기본적으로 일부 보안 기능이 강화된 프로그램을 컴파일할 수 있습니다(자세한 내용은 8장의 |
- | * **--disable-multilib** \\ x86_64에서 LFS는 멀티라이브 구성을 지원하지 않습니다. 이 스위치는 x86에는 무해합니다. | + | |PIE 및 SSP에 대한 메모]]에서 확인할 수 있습니다). 컴파일러는 임시 실행 파일만 생성하므로 이 단계에서는 꼭 필요한 것은 아닙니다. 하지만 임시 패키지를 가능한 한 최종 패키지에 가깝게 만드는 것이 더 깔끔합니다. |
- | * **--disable-threads, | + | * //**--disable-shared**// \\ GCC가 내부 라이브러리를 정적으로 연결하도록 합니다. 공유 라이브러리에는 대상 시스템에 아직 설치되지 않은 Glibc가 필요하기 때문에 이 기능이 필요합니다. |
- | * **--enable-languages=c, | + | * //**--disable-multilib**// \\ x86_64에서 LFS는 멀티라이브 구성을 지원하지 않습니다. 이 스위치는 x86에는 무해합니다. |
+ | * //**--disable-threads**//, //**--disable-libatomic**//, //**--disable-libgomp**//, //**--disable-libquadmath**//, //**--disable-libssp**//, //**--disable-libvtv**//, //**--disable-libstdcxx**// \\ 각각 | ||
+ | * //**--enable-languages=c, | ||
GCC를 컴파일합니다. | GCC를 컴파일합니다. | ||
- | < | + | |
+ | <code bash> | ||
+ | make | ||
+ | </ | ||
패키지를 설치합니다. | 패키지를 설치합니다. | ||
- | <code lang=bash> | ||
- | 이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 limits.h에는 해당 시스템 limits.h 헤더(이 경우 $LFS/ | + | <code bash> |
+ | make install | ||
+ | </ | ||
+ | |||
+ | 이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 | ||
<WRAP info round center 90%> | <WRAP info round center 90%> | ||
- | [참고] | + | **참고** \\ |
- | 아래 명령은 역따옴표와 $() 구문이라는 | + | 아래 명령은 |
</ | </ | ||
- | < | + | |
+ | <code bash> | ||
cd .. | cd .. | ||
cat gcc/ | cat gcc/ | ||
줄 89: | 줄 116: | ||
----- | ----- | ||
- | 이 패키지의 상세한 내용은 [[.: | + | 이 패키지의 상세한 내용은 [[.: |
- | + |