linuxfromscratch:12.1:098-gcc-13.2.0

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:12.1:098-gcc-13.2.0 [2024/06/11 06:00] – 바깥 편집 127.0.0.1linuxfromscratch:12.1:098-gcc-13.2.0 [2024/06/15 11:43] (현재) – [8.28.1. GCC 설치] baecy
줄 11: 줄 11:
 GCC 패키지에는 C 컴파일러와 <nowiki>C++</nowiki> 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다. GCC 패키지에는 C 컴파일러와 <nowiki>C++</nowiki> 컴파일러가 포함된 GNU 컴파일러 컬렉션이 포함되어 있습니다.
  
-**대략적인 빌드 시간:** 42 SBU (테스트 포함) \\ +  * **빌드 시간:** 42 SBU (테스트 포함) 
-**필요한 디스크 공간:** 5.5 GB+  **디스크 공간:** 5.5 GB
  
 ---- ----
줄 33: 줄 33:
 <code bash> <code bash>
 mkdir -v build mkdir -v build
-cd build+cd       build
 </code> </code>
  
줄 52: 줄 52:
 GCC는 7가지 컴퓨터 언어를 지원하지만 대부분의 컴퓨터 언어에 대한 전제 조건이 되는 패키지가 아직 설치되지 않았습니다. GCC에서 지원되는 모든 언어를 빌드하는 방법에 대한 지침은 [[https://www.linuxfromscratch.org/blfs/view/stable-systemd/general/gcc.html|BLFS Book GCC]] 페이지를 참조하세요. GCC는 7가지 컴퓨터 언어를 지원하지만 대부분의 컴퓨터 언어에 대한 전제 조건이 되는 패키지가 아직 설치되지 않았습니다. GCC에서 지원되는 모든 언어를 빌드하는 방법에 대한 지침은 [[https://www.linuxfromscratch.org/blfs/view/stable-systemd/general/gcc.html|BLFS Book GCC]] 페이지를 참조하세요.
  
-=== 새로운 구성 매개 변수의 의미 ===+=== configure 옵션 설명 ===
  
-  * //LD=ld// \\ 구성 스립트에서 교차 빌드된 버전 대신 이 장의 앞부분에서 빌드한 Binutils 패키지로 설치된 ld 프로그램을 사용하도록 합니다.+  * //LD=ld// \\ 크로스 빌드된 버전 대신 이 장의 앞부분에서 빌드한 Binutils 패키지에서 설치된 **ld** 프로그램을 사용하도록 합니다.
   * //--disable-fixincludes// \\ 기본적으로 GCC를 설치하는 동안 일부 시스템 헤더는 GCC와 함께 사용하도록 "고정"됩니다. 이는 최신 Linux 시스템에는 필요하지 않으며 GCC를 설치한 후 패키지를 다시 설치하는 경우 잠재적으로 해로울 수 있습니다. 이 스위치는 GCC가 헤더를 "고정"하지 못하도록 합니다.   * //--disable-fixincludes// \\ 기본적으로 GCC를 설치하는 동안 일부 시스템 헤더는 GCC와 함께 사용하도록 "고정"됩니다. 이는 최신 Linux 시스템에는 필요하지 않으며 GCC를 설치한 후 패키지를 다시 설치하는 경우 잠재적으로 해로울 수 있습니다. 이 스위치는 GCC가 헤더를 "고정"하지 못하도록 합니다.
-  * //--with-system-zlib// \\ GCC가 자체 내부 복사본이 아닌 시스템에 설치된 Zlib 라이브러리 복사본에 링크하도록 지시합니다.+  * //--with-system-zlib// \\ GCC가 소스트리에 포함된 라브러리가 아닌 시스템에 설치된 Zlib 라이브러리에 링크하도록 지시합니다.
  
 <WRAP info center round 90%> <WRAP info center round 90%>
-**참고** \\ PIE(위치 독립 실행 파일)는 메모리 어디에서나 로드할 수 있는 바이너리 프로그램입니다. PIE를 사용하지 않으면 ASLR(주소 공간 레이아웃 무작위화)라는 보안 기능을 공유 라이브러리에는 적용할 수 있지만 실행 파일 자체에는 적용할 수 없습니다. PIE를 활성화하면 공유 라이브러리 외에 실행 파일에도 ASLR을 적용할 수 있으며 실행 파일의 민감한 코드나 데이터의 고정 주소를 기반으로 하는 일부 공격을 완화할 수 있습니다.+**참고** \\ [[wpko>위치 독립 코드|위치 독립 실행 파일]](PIE)는 메모리 어디에서나 로드할 수 있는 바이너리 프로그램입니다. PIE를 사용하지 않으면 주소 공간 레이아웃 무작위화([[wp>Address space layout randomization|ASLR]])라는 보안 기능을 공유 라이브러리에는 적용할 수 있지만 실행 파일 자체에는 적용할 수 없습니다. PIE를 활성화하면 공유 라이브러리 외에 실행 파일에도 ASLR을 적용할 수 있으며 실행 파일의 민감한 코드나 데이터의 고정 주소를 기반으로 하는 일부 공격을 완화할 수 있습니다.
  
-SSP(스택 스매싱 보호)는 매개변수 스택이 손상되지 않도록 하는 기술입니다. 예를 들어 스택이 손상되면 서브루틴의 반환 주소가 변경되어 프로그램이나 공유 라이브러리에 존재하거나 공격자가 어떤 식으로든 삽입한 위험한 코드로 제어권이 이전될 수 있습니다.+스택 스매싱 보호(SSP)는 매개변수 스택이 손상되지 않도록 하는 기술입니다. 예를 들어 스택이 손상되면 서브루틴의 반환 주소가 변경되어 프로그램이나 공유 라이브러리에 존재하거나 공격자가 어떤 식으로든 삽입한 위험한 코드로 제어권이 이전될 수 있습니다.
 </WRAP> </WRAP>
  
줄 71: 줄 71:
  
 <WRAP important center round 90%> <WRAP important center round 90%>
-**중요** \\ 이 섹션에서는 GCC용 테스트 스위트가 매우 중요하지만 시간이 오래 걸립니다. 처음 LFS를 읽는 독자는 테스트 스위트를 실행하는 것이 좋습니다. 아래의 ''make -k check'' 명령에 ''-j<x>'' 를 추가하면 테스트 실행 시간을 크게 줄일 수 있습니다. 여기서 <x>는 시스템의 CPU 코어 수입니다.+**중요** \\ GCC용 테스트 스위트는 매우 중요하지만 시간이 오래 걸립니다. LFS를 처음 읽는 독자는 테스트 스위트를 실행하는 것이 좋습니다. 아래의 ''make -k check'' 명령에 ''-j<x>'' 를 추가하면 테스트 실행 시간을 크게 줄일 수 있습니다. 여기서 <x>는 시스템의 CPU 코어 수입니다.
 </WRAP> </WRAP>
  
줄 89: 줄 89:
 테스트 스위트 결과의 요약을 추출하려면 다음을 실행합니다. 테스트 스위트 결과의 요약을 추출하려면 다음을 실행합니다.
  
-<codd bash>+<code bash>
 ../contrib/test_summary ../contrib/test_summary
 </code> </code>
줄 114: 줄 114:
 </code> </code>
  
-"역사적인" 이유로 [[https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s09.html|FHS]]에 필요한 심볼릭 링크를 생성합니다.+"관습적인" 이유로 [[https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s09.html|FHS]]에 필요한 심볼릭 링크를 생성합니다.
  
 <code bash> <code bash>
줄 126: 줄 126:
 </code> </code>
  
-호환성 심볼릭 링크를 추가하여 링크 시간 최적화(LTO)로 프로그램을 빌드할 수 있도록 합니다.+호환성 심볼릭 링크를 추가하여 링크 시 최적화(LTO)로 프로그램을 빌드할 수 있도록 합니다.
  
 <code bash> <code bash>
줄 141: 줄 141:
 cc dummy.c -v -Wl,--verbose &> dummy.log cc dummy.c -v -Wl,--verbose &> dummy.log
 readelf -l a.out | grep ': /lib' readelf -l a.out | grep ': /lib'
-[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] +[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]</code>
-</code>+
  
 이제 올바른 시작 파일을 사용하도록 설정되어 있는지 확인합니다. 이제 올바른 시작 파일을 사용하도록 설정되어 있는지 확인합니다.
줄 151: 줄 150:
 /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../../../../lib/Scrt1.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../../../../lib/Scrt1.o succeeded
 /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../../../../lib/crti.o succeeded /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../../../../lib/crti.o succeeded
-/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../.../../../lib/crtn.o succeeded +/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/../.../../../lib/crtn.o succeeded</code>
-</code>+
  
 머신 아키텍처에 따라 위의 내용은 약간 다를 수 있습니다. 차이점은 ''/usr/lib/gcc'' 뒤의 디렉토리 이름입니다. 여기서 중요한 것은 **''gcc''**가 ''/usr/lib'' 디렉터리에서 세 개의 ''crt*.o'' 파일을 모두 찾았다는 것입니다. 머신 아키텍처에 따라 위의 내용은 약간 다를 수 있습니다. 차이점은 ''/usr/lib/gcc'' 뒤의 디렉토리 이름입니다. 여기서 중요한 것은 **''gcc''**가 ''/usr/lib'' 디렉터리에서 세 개의 ''crt*.o'' 파일을 모두 찾았다는 것입니다.
줄 166: 줄 164:
  /usr/local/include  /usr/local/include
  /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/include-fixed  /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.0/include-fixed
- /usr/include + /usr/include</code>
-</code>+
  
 다시 말하지만, 시스템 아키텍처에 따라 대상 삼중 항의 이름을 딴 디렉터리는 위와 다를 수 있습니다. 다시 말하지만, 시스템 아키텍처에 따라 대상 삼중 항의 이름을 딴 디렉터리는 위와 다를 수 있습니다.
줄 183: 줄 180:
 SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/usr/local/lib")
 SEARCH_DIR("/lib") SEARCH_DIR("/lib")
-SEARCH_DIR("/usr/lib"); +SEARCH_DIR("/usr/lib");</code>
-</code>+
  
 32비트 시스템에서는 몇 가지 다른 디렉터리를 사용할 수 있습니다. 예를 들어 다음은 i686 컴퓨터의 출력입니다. 32비트 시스템에서는 몇 가지 다른 디렉터리를 사용할 수 있습니다. 예를 들어 다음은 i686 컴퓨터의 출력입니다.
줄 197: 줄 193:
 SEARCH_DIR("/usr/local/lib") SEARCH_DIR("/usr/local/lib")
 SEARCH_DIR("/lib") SEARCH_DIR("/lib")
-SEARCH_DIR("/usr/lib"); +SEARCH_DIR("/usr/lib");</code>
-</code>+
  
 다음으로 올바른 libc를 사용하고 있는지 확인합니다. 다음으로 올바른 libc를 사용하고 있는지 확인합니다.
줄 206: 줄 201:
 <code bash host=lfs user=root cmdout=2> <code bash host=lfs user=root cmdout=2>
 grep "/lib.*/libc.so.6" dummy.log grep "/lib.*/libc.so.6" dummy.log
-attempt to open /usr/lib/libc.so.6 succeeded +attempt to open /usr/lib/libc.so.6 succeeded</code>
-</code>+
  
 GCC가 올바른 동적 링커를 사용하고 있는지 확인합니다. GCC가 올바른 동적 링커를 사용하고 있는지 확인합니다.
줄 213: 줄 207:
 <code bash host=lfs user=root cmdout=2> <code bash host=lfs user=root cmdout=2>
 grep found dummy.log grep found dummy.log
-found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2 +found ld-linux-x86-64.so.2 at /usr/lib/ld-linux-x86-64.so.2</code>
-</code>+
  
 위와 같이 출력이 나타나지 않거나 아무것도 출력되지 않는다면 심각한 문제가 있는 것입니다. 각 단계를 조사하고 역추적하여 문제의 원인을 찾아서 해결하세요. 계속 진행하기 전에 모든 문제를 해결해야 합니다. 위와 같이 출력이 나타나지 않거나 아무것도 출력되지 않는다면 심각한 문제가 있는 것입니다. 각 단계를 조사하고 역추적하여 문제의 원인을 찾아서 해결하세요. 계속 진행하기 전에 모든 문제를 해결해야 합니다.
  • linuxfromscratch/12.1/098-gcc-13.2.0.1718085646.txt.gz
  • 마지막으로 수정됨: 2024/06/11 06:00
  • 저자 127.0.0.1