4.2. GCC Toolset 12

GCC Toolset 버전 12에 특정한 정보와 이 버전에 포함된 툴에 대해 알아보십시오.

4.2.1. GCC Toolset 12에서 제공하는 툴 및 버전

GCC Toolset 12는 다음 도구 및 버전을 제공합니다.

표 4.1. GCC Toolset 12의 툴 버전

이름버전설명

GCC

12.1.1

C, C++ 및 Fortran을 지원하는 이식 가능한 컴파일러 제품군입니다.

GDB

11.2

C, C++ 및 Fortran으로 작성된 프로그램에 대한 명령줄 디버거입니다.

binutils

2.38

오브젝트 파일 및 바이너리를 검사하고 조작하는 바이너리 도구 및 기타 유틸리티 컬렉션입니다.

dwz

0.14

ELF 공유 라이브러리 및 크기를 위해 ELF 실행 파일에 포함된 DWARF 디버깅 정보를 최적화하는 툴입니다.

annobin

10.76

빌드 보안 검사 툴입니다.

4.2.2. GCC Toolset 12의 C++ 호환성

중요

여기에 제시된 호환성 정보는 GCC Toolset 12의 GCC에만 적용됩니다.

GCC Toolset의 GCC 컴파일러는 다음과 같은 C++ 표준을 사용할 수 있습니다.

C++14

이 언어 표준은 GCC Toolset 12에서 사용할 수 있습니다.

C++14 언어 버전을 사용하는 것은 해당 플래그로 컴파일된 모든 C++ 개체가 GCC 버전 6 이상을 사용하여 빌드될 때 지원됩니다.

C++11

이 언어 표준은 GCC Toolset 12에서 사용할 수 있습니다.

C++11 언어 버전을 사용하는 것은 해당 플래그로 컴파일된 모든 C++ 개체가 GCC 버전 5 이상을 사용하여 빌드될 때 지원됩니다.

C++98
이 언어 표준은 GCC Toolset 12에서 사용할 수 있습니다. 이 표준을 사용하여 빌드된 바이너리 요소, 공유 라이브러리 및 오브젝트는 GCC Toolset, Red Hat Developer Toolset, RHEL 5, 6, 7 및 8의 GCC와 빌드되지 않고 자유롭게 혼합할 수 있습니다.
C++17

이 언어 표준은 GCC Toolset 12에서 사용할 수 있습니다.

이는 GCC Toolset 12의 기본 언어 표준 설정이며, GNU 확장이 -std=gnu++17 옵션을 사용하는 것과 동일합니다.

C++17 언어 버전을 사용하는 것은 해당 플래그로 컴파일된 모든 C++ 개체가 GCC 버전 10 이상을 사용하여 빌드될 때 지원됩니다.

C++20 및 C++23

이 언어 표준은 GCC Toolset 12에서만 실험적이고 불안정하며 지원되지 않는 기능으로만 사용할 수 있습니다. 또한 이 표준을 사용하여 빌드된 오브젝트, 바이너리 파일 및 라이브러리의 호환성은 보장할 수 없습니다.

C++20 지원을 활성화하려면 명령줄 옵션 -std=c++20 을 g++ 명령줄에 추가합니다.

C++23 지원을 활성화하려면 명령줄 옵션 -std=c++23 을 g++ 명령줄에 추가합니다.

모든 언어 표준은 표준 호환 변형 또는 GNU 확장에서 사용할 수 있습니다.

GCC Toolset과 함께 빌드된 오브젝트를 RHEL 툴체인( .o 또는 .a 파일)으로 빌드된 오브젝트를 혼합할 때 GCC Toolset 툴체인을 모든 링크에 사용해야 합니다. 이렇게 하면 GCC Toolset에서만 제공되는 최신 라이브러리 기능이 링크 타임에 해결됩니다.

4.2.3. GCC Toolset 12의 GCC 관련 세부 사항

정적 라이브러리 연결

특정 최신 라이브러리 기능은 여러 버전의 Red Hat Enterprise Linux에서 실행을 지원하기 위해 GCC Toolset으로 빌드된 애플리케이션에 정적으로 연결됩니다. 이는 표준 Red Hat Enterprise Linux 에라타가 이 코드를 변경하지 않기 때문에 추가 마이너 보안 위험이 발생합니다. 이러한 위험으로 인해 개발자가 애플리케이션을 다시 빌드해야 하는 경우 Red Hat은 보안 에라타를 사용하여 이를 전달합니다.

중요

이러한 추가 보안 위험 때문에 개발자는 동일한 이유로 전체 애플리케이션을 정적으로 연결하지 않는 것이 좋습니다.

연결할 때 오브젝트 파일 뒤에 라이브러리 지정

GCC Toolset에서 라이브러리는 정적 아카이브를 통해 몇 가지 기호를 지정할 수 있는 링커 스크립트를 사용하여 연결됩니다. 이는 Red Hat Enterprise Linux의 여러 버전과의 호환성을 보장하기 위해 필요합니다. 그러나 링커 스크립트는 각 공유 오브젝트 파일의 이름을 사용합니다. 결과적으로 링커는 오브젝트 파일을 지정하는 옵션보다 라이브러리 추가 옵션이 지정될 때 오브젝트 파일에 필요한 기호를 다른 기호 처리 규칙을 사용하지 않습니다.

$ scl enable gcc-toolset-12 'gcc -lsomelib objfile.o'

이러한 방식으로 GCC Toolset의 라이브러리를 사용하면 기호에 대한 정의되지 않은 참조가 메시지 링커 오류 메시지가 됩니다. 이 문제를 방지하려면 표준 연결 관행에 따라 오브젝트 파일을 지정하는 옵션 뒤에 라이브러리 추가 옵션을 지정합니다.

$ scl enable gcc-toolset-12 'gcc objfile.o -lsomelib'

이 권장 사항은 기본 Red Hat Enterprise Linux 버전의 GCC 를 사용하는 경우에도 적용됩니다.

4.2.4. GCC Toolset 12의 binutils 세부 정보

정적 라이브러리 연결

특정 최신 라이브러리 기능은 여러 버전의 Red Hat Enterprise Linux에서 실행을 지원하기 위해 GCC Toolset으로 빌드된 애플리케이션에 정적으로 연결됩니다. 이는 표준 Red Hat Enterprise Linux 에라타가 이 코드를 변경하지 않기 때문에 추가 마이너 보안 위험이 발생합니다. 이러한 위험으로 인해 개발자가 애플리케이션을 다시 빌드해야 하는 경우 Red Hat은 보안 에라타를 사용하여 이를 전달합니다.

중요

이러한 추가 보안 위험 때문에 개발자는 동일한 이유로 전체 애플리케이션을 정적으로 연결하지 않는 것이 좋습니다.

연결할 때 오브젝트 파일 뒤에 라이브러리 지정

GCC Toolset에서 라이브러리는 정적 아카이브를 통해 몇 가지 기호를 지정할 수 있는 링커 스크립트를 사용하여 연결됩니다. 이는 Red Hat Enterprise Linux의 여러 버전과의 호환성을 보장하기 위해 필요합니다. 그러나 링커 스크립트는 각 공유 오브젝트 파일의 이름을 사용합니다. 결과적으로 링커는 오브젝트 파일을 지정하는 옵션보다 라이브러리 추가 옵션이 지정될 때 오브젝트 파일에 필요한 기호를 다른 기호 처리 규칙을 사용하지 않습니다.

$ scl enable gcc-toolset-12 'ld -lsomelib objfile.o'

이러한 방식으로 GCC Toolset의 라이브러리를 사용하면 기호에 대한 정의되지 않은 참조가 메시지 링커 오류 메시지가 됩니다. 이 문제를 방지하려면 표준 연결 관행을 따르고 오브젝트 파일을 지정하는 옵션 뒤에 라이브러리 추가 옵션을 지정합니다.

$ scl enable gcc-toolset-12 'ld objfile.o -lsomelib'

이 권장 사항은 기본 Red Hat Enterprise Linux 버전의 binutils 를 사용하는 경우에도 적용됩니다.

4.2.5. GCC Toolset 12의 annobin 관련 세부 사항

GCC Toolset 12의 annobingcc 간의 동기화 문제로 인해 다음과 유사한 오류 메시지와 함께 컴파일이 실패할 수 있습니다.

cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory

이 문제를 해결하려면 annobin.so 파일에서 gcc-annobin.so 파일로 플러그인 디렉토리에 심볼릭 링크를 만듭니다.

# cd /opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin
# ln -s annobin.so gcc-annobin.so

아키텍처 를 시스템에서 사용하는 아키텍처로 교체합니다.

  • aarch64
  • i686
  • ppc64le
  • s390x
  • x86_64