# GCC 10.2.0 (Pass 1)

GCC 패키지는 C, C++ 컴파일러를 포함하는 GNU 컴파일러 모음을 제곰합니다.

평균 빌드 시간 필요한 디스크 공간
11 SBU 3.7GB

# 크로스 GCC의 설치

GCC는 GMP, MPFR, MPC 패키지를 요구합니다. 이 패키지가 호스트 배포판에 없을 수 있기 때문에, 이는 GCC와 함께 빌드됩니다. 각각의 패키지를 GCC 소스 디렉토리로 압축 해제한 다음 디렉토리 이름을 변경해서 GCC 빌드 프로세스가 이를 자동으로 사용하도록 합니다:

tar -xf ../mpfr-4.1.0.tar.xz
mv -v mpfr-4.1.0 mpfr
tar -xf ../gmp-6.2.1.tar.xz
mv -v gmp-6.2.1 gmp
tar -xf ../mpc-1.2.1.tar.gz
mv -v mpc-1.2.1 mpc

x86_64 호스트에서는, 64비트용 기본 디렉토리의 이름을 lib로 설정하십시오:

case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' \
        -i.orig gcc/config/i386/t-linux64
 ;;
esac

GCC 문서는 GCC를 별도의 빌드 디렉토리에서 빌드하는 것을 권장합니다:

mkdir build
cd build

GCC 컴파일을 준비하십시오:

../configure                                       \
    --target=$LFS_TGT                              \
    --prefix=$LFS/tools                            \
    --with-glibc-version=2.11                      \
    --with-sysroot=$LFS                            \
    --with-newlib                                  \
    --without-headers                              \
    --enable-initfini-array                        \
    --disable-nls                                  \
    --disable-shared                               \
    --disable-multilib                             \
    --disable-decimal-float                        \
    --disable-threads                              \
    --disable-libatomic                            \
    --disable-libgomp                              \
    --disable-libquadmath                          \
    --disable-libssp                               \
    --disable-libvtv                               \
    --disable-libstdcxx                            \
    --enable-languages=c,c++

configure 옵션의 의미

  • --with-glibc-version=2.11

    이 옵션을 선택하면 패키지가 호스트의 glibc 버전과 호환됩니다. 호스트 시스템 요구 사항에 지정된 최소 glibc 요구 사항으로 설정합니다.

  • --with-newlib

    사용 가능한 C 라이브러리를 아직 사용할 수 없으므로 libgcc를 빌드할 때 필요한 inhibit_libc 상수가 정의됩니다. 이렇게 하면 libc가 필요한 모든 코드의 컴파일을 방지할 수 있습니다.

  • --without-headers

    완전한 크로스 컴파일러를 만들 때 GCC는 대상 시스템과 호환되는 표준 헤더가 필요합니다. 우리의 목적상 이러한 헤더는 필요하지 않습니다. 이 옵션을 통해 GCC가 해당 항목을 찾지 않도록 합니다.

  • --enable-initfini-array

    이 옵션은 필요하지만 크로스 컴파일러를 빌드할 때 감지되지 않는 몇몇 내부 데이터 구조의 사용을 강제합니다.

  • --disable-shared

    이 옵션은 GCC에게 내부 라이브러리를 정적으로 링크하도록 강제합니다. 공유 라이브러리의 경우 대상 시스템에 아직 설치되지 않은 glibc가 필요하기 때문에 이 옵션이 필요합니다.

  • --disable-multilib

    x86_64에서 LFS는 multilib 구성을 지원하지 않습니다. 이 옵션은 x86에서는 해롭지 않습니다.

  • --disable-decimal-float, --disable-threads, --disable-libatomic, --disable-libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx

    이러한 옵션은 각각 부동 소수점, 스레드, libatomic, libgomp, libssp, libvtv 및 C++ 표준 라이브러리에 대한 지원을 비활성화합니다. 이러한 기능은 크로스 컴파일러를 빌드할 때 컴파일하지 못하며 임시 libc를 크로스 컴파일하는 작업에는 필요하지 않습니다.

  • --enable-languages=c,c++

    이 옵션은 C, C++ 컴파일러만 빌드되도록 합니다. 다른 언어는 필요하지 않습니다.

GCC를 컴파일하십시오:

make

패키지를 설치하십시오:

make install

이 GCC 빌드는 몇 개의 내부 시스템 헤더를 설치합니다. 일반적으로, 이 중 하나, limits.h 헤더(이 경우 $LFS/usr/include/limits.h)는 해당되는 시스템의 limits.h 헤더를 포함합니다. 하지만, GCC를 빌드할 때 $LFS/usr/include/limits.h가 존재하지 않기 때문에, 방금 설치된 내부 헤더는 독립적인 일부 파일이고 시스템 헤더의 확장 기능을 포함하지 않습니다. 이는 glibc를 발드하는 데 충분하지만, 나중에는 전체 내부 헤더가 필요합니다. GCC 빌드 시스템이 일반적인 경우에 진행하는 작업과 비슷한 명령어를 통해서 내부 헤더의 전체 버전을 생성하십시오:

cd .. &&
cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/install-tools/include/limits.h

이 패키지의 자세한 내용은 여기를 참고하십시오.

Last Updated: 5/3/2021, 5:27:05 AM