차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
linuxfromscratch:12.1:036-gcc-13.2.0_-_pass_1 [2024/05/03 04:41] – baecy | linuxfromscratch: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 | ||
+ | |[[.: | ||
+ | |||
+ | |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 |
- | 필요한 | + | * **디스크 공간:** 4.1 GB |
------ | ------ | ||
- | 5.3.1. Cross GCC 설치 | ||
- | GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 결과 디렉터리의 이름을 변경하여 GCC 빌드 절차에서 자동으로 사용할 수 있도록 하세요: | ||
- | [참고] 참고 | + | ==== 5.3.1. Cross GCC 설치 ==== |
- | 이 장에 대해 자주 오해하는 경우가 있습니다. 절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다(패키지 빌드 지침). 먼저 소스 디렉토리에서 gcc-13.2.0 tarball을 추출한 다음 생성한 디렉토리로 변경합니다. 그런 다음 아래 지침을 진행해야 합니다. | + | |
+ | GCC를 사용하려면 GMP, MPFR 및 MPC 패키지가 필요합니다. 이러한 패키지는 호스트 배포에 포함되지 않을 수 있으므로 GCC로 빌드됩니다. 각 패키지의 압축을 GCC 소스 디렉터리에 풀고 디렉터리의 이름을 변경하여 GCC 빌드 중에 자동으로 사용할 수 있도록 하세요. | ||
+ | |||
+ | <WRAP info round center 90%> | ||
+ | **참고** \\ | ||
+ | 이 장에 대해 자주 오해하는 경우가 있습니다. 절차는 앞서 설명한 대로 다른 모든 챕터와 동일합니다([[.: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
tar -xf ../ | tar -xf ../ | ||
mv -v mpfr-4.2.1 mpfr | mv -v mpfr-4.2.1 mpfr | ||
줄 17: | 줄 32: | ||
tar -xf ../ | tar -xf ../ | ||
mv -v mpc-1.3.1 mpc | mv -v mpc-1.3.1 mpc | ||
- | x86_64 호스트에서는 64비트 라이브러리의 기본 디렉터리 이름을 " | + | </ |
- | 케이스 $(uname -m) in | + | x86_64 호스트에서는 64비트 라이브러리의 기본 디렉터리 이름을 " |
+ | |||
+ | <code bash> | ||
+ | case $(uname -m) in | ||
x86_64) | x86_64) | ||
- | sed -e '/ | + | sed -e '/ |
-i.orig gcc/ | -i.orig gcc/ | ||
;; | ;; | ||
esac | esac | ||
- | GCC 문서에서는 전용 빌드 디렉터리에 GCC를 빌드할 것을 권장합니다: | + | </ |
- | mkdir -v 빌드 | + | GCC 문서에서는 별도의 디렉터리에 GCC를 |
- | cd 빌드 | + | |
- | 컴파일을 위해 GCC를 준비합니다: | + | |
- | ../ | + | <code bash> |
- | --target=$LFS_TGT \ | + | mkdir -v build |
- | | + | cd |
- | --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, | + | |
- | 구성 옵션의 의미 | + | |
- | --with-glibc-version=2.39 | + | GCC 컴파일을 준비합니다. |
- | 이 옵션은 대상에서 사용할 Glibc 버전을 지정합니다. pass1 GCC로 컴파일된 모든 것이 호스트 배포판의 libc와 분리된 루트 환경에서 실행되므로 호스트 배포판의 libc와는 관련이 없습니다. | + | |
- | --with-newlib | + | <code bash> |
- | 아직 작동하는 C 라이브러리를 사용할 수 없으므로 libgcc를 빌드할 때 inhibit_libc 상수가 정의되도록 합니다. 이렇게 하면 libc 지원이 필요한 모든 코드의 컴파일이 방지됩니다. | + | ../ |
+ | --target=$LFS_TGT | ||
+ | --prefix=$LFS/ | ||
+ | --with-glibc-version=2.39 \ | ||
+ | --with-sysroot=$LFS | ||
+ | | ||
+ | | ||
+ | --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, | ||
+ | </ | ||
- | --헤더 없이 | + | === configure 옵션 설명 === |
- | 완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 스위치는 GCC가 이러한 헤더를 찾지 않도록 합니다. | + | |
- | --enable-default-pie 및 --enable-default-ssp | + | * // |
- | 이 스위치를 사용하면 | + | * // |
+ | * // | ||
+ | * //**--enable-default-pie**// 및 //**--enable-default-ssp**// \\ GCC가 기본적으로 일부 보안 기능이 강화된 프로그램을 컴파일할 수 있습니다(자세한 내용은 8장의 | ||
+ | |PIE 및 SSP에 대한 메모]]에서 확인할 수 있습니다). 컴파일러는 임시 실행 파일만 생성하므로 이 단계에서는 꼭 필요한 것은 아닙니다. 하지만 임시 패키지를 가능한 한 최종 패키지에 가깝게 만드는 것이 더 깔끔합니다. | ||
+ | * // | ||
+ | * // | ||
+ | * // | ||
+ | * // | ||
- | --disable-shared | + | GCC를 컴파일합니다. |
- | 이 스위치는 | + | |
- | + | ||
- | --disable-multilib | + | |
- | x86_64에서 LFS는 멀티라이브 구성을 지원하지 않습니다. 이 스위치는 x86에는 무해합니다. | + | |
- | + | ||
- | --disable-threads, | + | |
- | 이 스위치는 각각 스레딩, libatomic, libgomp, libquadmath, | + | |
- | + | ||
- | --enable-languages=c, | + | |
- | 이 옵션은 C와 C++ 컴파일러만 빌드하도록 | + | |
- | + | ||
- | 실행하여 GCC를 컴파일합니다: | + | |
+ | <code bash> | ||
make | make | ||
- | 패키지를 설치합니다: | + | </ |
+ | 패키지를 설치합니다. | ||
+ | |||
+ | <code bash> | ||
make install | make install | ||
- | 이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 limits.h에는 해당 시스템 limits.h 헤더(이 경우 $LFS/ | + | </ |
+ | |||
+ | 이 GCC 빌드는 몇 가지 내부 시스템 헤더를 설치했습니다. 일반적으로 그 중 하나인 | ||
- | [참고] | + | <WRAP info round center 90%> |
- | 아래 명령은 역따옴표와 $() 구문이라는 | + | **참고** \\ |
+ | 아래 명령은 | ||
+ | </ | ||
+ | <code bash> | ||
cd .. | cd .. | ||
cat gcc/ | cat gcc/ | ||
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/ | `dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/ | ||
- | 이 패키지의 상세한 내용은 8.28.2 " | + | </ |
+ | ----- | ||
+ | 이 패키지의 상세한 내용은 [[.: |