4.2. GCC Toolset 15
Red Hat Enterprise Linux의 GCC 도구 세트 15는 C, C++ 및 Fortran에 대한 업데이트된 컴파일러 및 디버거를 제공합니다. 이를 통해 시스템 안정성 및 지원을 유지하면서 현재 기능을 사용하여 애플리케이션을 빌드, 테스트 및 최적화할 수 있습니다.
4.2.1. GCC Toolset 15 툴 및 버전 링크 복사링크가 클립보드에 복사되었습니다!
GCC Toolset 15는 RHEL에서 애플리케이션을 빌드하고 디버깅하기 위한 업데이트된 개발 툴 버전을 제공합니다. 다음 표에는 툴과 해당 버전이 나열되어 있습니다.
- [도구 목록]
| 이름 | 버전 | 설명 |
| GCC | 15.1.0 | C, C++ 및 Fortran을 지원하는 이식 가능한 컴파일러 제품군입니다. |
| binutils | 2.44 | 오브젝트 파일 및 바이너리를 검사하고 조작하는 바이너리 툴 및 기타 유틸리티 컬렉션입니다. |
| dwz | 0.16 | ELF 공유 라이브러리 및 ELF 실행 파일에 포함된 DWARF 디버깅 정보를 최적화하는 툴입니다. |
4.2.2. GCC Toolset 15의 C++ 호환성 링크 복사링크가 클립보드에 복사되었습니다!
GCC Toolset 15는 다양한 C++ 언어 표준을 지원합니다. 기본 표준은 C++17이지만 C++98, C++11, C++14 또는 C++20, C++23, C++26과 같은 다른 옵션을 선택할 수 있습니다. 다른 표준을 선택하려면 코드를 빌드할 때 적절한 컴파일러 플래그를 사용하십시오.
이 호환성 정보는 GCC Toolset 15의 GCC에만 적용됩니다.
GCC Toolset 15의 GCC 컴파일러는 다음 C++ 표준을 사용할 수 있습니다.
- C++98
- 이 언어 표준은 GCC Toolset 15에서 사용할 수 있습니다. 이 표준을 사용하여 구축된 바이너리, 공유 라이브러리 및 오브젝트는 GCC Toolset 15, Red Hat Developer Toolset 및 RHEL 5, 6, 7, 8의 GCC와 함께 빌드할지 여부에 관계없이 자유롭게 혼합할 수 있습니다.
- C++11
이 언어 표준은 GCC Toolset 15에서 사용할 수 있습니다.
C++11 언어 버전 사용은 해당 플래그로 컴파일된 모든 C++ 오브젝트가 GCC 버전 5 이상을 사용하여 빌드된 경우 지원됩니다.
- C++14
이 언어 표준은 GCC Toolset 15에서 사용할 수 있습니다.
C++14 언어 버전 사용은 해당 플래그로 컴파일된 모든 C++ 오브젝트가 GCC 버전 6 이상을 사용하여 빌드된 경우 지원됩니다.
- C++17
이 언어 표준은 GCC Toolset 15에서 사용할 수 있습니다.
이는 GNU 확장이 포함된 GCC Toolset 15의 기본 언어 표준 설정이며
-std=gnu++17옵션을 사용하는 것과 동일합니다.C++17 언어 버전 사용은 해당 플래그로 컴파일된 모든 C++ 오브젝트가 GCC 버전 10 이상을 사용하여 빌드된 경우 지원됩니다.
- C++20, C++23, C++26
이러한 언어 표준은 실험적이고 불안정하며 지원되지 않는 기능으로만 GCC Toolset 15에서 사용할 수 있습니다. 또한 이러한 표준을 사용하여 구축된 오브젝트, 바이너리 파일 및 라이브러리의 호환성은 보장할 수 없습니다.
C++20 표준을 활성화하려면 명령줄 옵션
-std=c++20을g++명령줄에 추가합니다.C++23 표준을 활성화하려면 명령줄 옵션
-std=c++23을g++명령줄에 추가합니다.C++26 표준을 활성화하려면
g++명령줄 명령줄에-std=c++26명령줄을 추가합니다.
모든 언어 표준은 표준 호환 변형과 GNU 확장 모두에서 사용할 수 있습니다.
GCC Toolset 15로 빌드된 개체와 시스템 툴체인, particular .o 또는 .a 파일로 빌드된 오브젝트를 결합할 때 GCC Toolset 15를 사용하십시오. 이렇게 하면 GCC Toolset 15에서만 제공하는 최신 라이브러리 기능이 링크 타임에 해결될 수 있습니다.
4.2.3. GCC 도구 세트 15의 GCC 세부 사항 링크 복사링크가 클립보드에 복사되었습니다!
- 라이브러리의 정적 연결
- 보다 최신 라이브러리 기능은 여러 버전의 Red Hat Enterprise Linux에서 실행을 지원하기 위해 GCC Toolset 15로 구축된 애플리케이션에 정적으로 연결되어 있습니다. 이는 표준 Red Hat Enterprise Linux 에라타가 이 코드를 변경하지 않기 때문에 추가 마이너 보안 위험이 발생합니다. 이러한 위험으로 인해 개발자가 애플리케이션을 다시 빌드해야 하는 경우 Red Hat은 보안 에라타를 사용하여 이를 전달합니다.
이러한 추가 보안 위험 때문에 개발자는 동일한 이유로 전체 애플리케이션을 정적으로 연결하지 않는 것이 좋습니다.
- 연결할 때 오브젝트 파일 후 라이브러리 지정
GCC Toolset 15에서 라이브러리는 linker 스크립트를 사용하여 연결되며 정적 아카이브를 통해 일부 기호를 지정할 수 있습니다. 이는 여러 버전의 Red Hat Enterprise Linux와의 호환성을 보장하기 위해 필요합니다. 그러나 링커 스크립트는 해당 공유 오브젝트 파일의 이름을 사용합니다. 결과적으로 링커는 예상과 다른 기호 처리 규칙을 사용하고 오브젝트 파일을 추가하는 옵션이 오브젝트 파일을 지정하기 전에 라이브러리를 추가하는 옵션이 지정되면 오브젝트 파일에 필요한 기호를 인식하지 못합니다.
$ gcc-toolset-15-env gcc -lsomelib objfile.o이러한 방식으로 GCC Toolset 15의 라이브러리를 사용하면 링커 오류 메시지가
기호에 대한 정의되지 않은 참조가 발생합니다. 이 문제를 방지하려면 표준 연결 방법을 따르고 오브젝트 파일을 지정하는 옵션 뒤에 라이브러리를 추가하여 옵션을 지정합니다.$ gcc-toolset-15-env gcc objfile.o -lsomelib이 권장 사항은 GCC 의 기본 Red Hat Enterprise Linux 버전을 사용하는 경우에도 적용됩니다.
4.2.4. GCC Toolset 15의 binutils 세부 사항 링크 복사링크가 클립보드에 복사되었습니다!
- 라이브러리의 정적 연결
- GCC Toolset 15는 최신 라이브러리 기능을 애플리케이션에 정적으로 연결하여 여러 Red Hat Enterprise Linux 버전에서 호환성을 보장합니다. 보안 업데이트를 다시 빌드해야 하므로 정적으로 연결된 코드는 사소한 보안 위험이 발생할 수 있습니다. 보안 취약점이 발견되면 Red Hat은 개발자에게 보안 권고를 통해 영향을 받는 애플리케이션을 다시 빌드하도록 알립니다.
이러한 추가 보안 위험 때문에 개발자는 동일한 이유로 전체 애플리케이션을 정적으로 연결하지 않는 것이 좋습니다.
- 연결할 때 오브젝트 파일 후 라이브러리 지정
GCC Toolset 15에서 라이브러리는 정적 아카이브를 통해 일부 기호를 지정할 수 있는 링커 스크립트를 사용하여 연결됩니다. 이는 여러 버전의 Red Hat Enterprise Linux와의 호환성을 보장하기 위해 필요합니다. 그러나 링커 스크립트는 해당 공유 오브젝트 파일의 이름을 사용합니다. 결과적으로 링커는 예상과 다른 기호 처리 규칙을 사용하고 오브젝트 파일을 추가하는 옵션이 오브젝트 파일을 지정하기 전에 라이브러리를 추가하는 옵션이 지정되면 오브젝트 파일에 필요한 기호를 인식하지 못합니다.
$ gcc-toolset-15-env gcc ld -lsomelib objfile.o이러한 방식으로 GCC Toolset 15의 라이브러리를 사용하면 링커 오류 메시지가
기호에 대한 정의되지 않은 참조가 발생합니다. 이 문제를 방지하려면 표준 연결 방법을 따르고 오브젝트 파일을 지정하는 옵션 뒤에 라이브러리를 추가하는 옵션을 지정합니다.$ gcc-toolset-15-env ld objfile.o -lsomelib이 권장 사항은 binutils 의 기본 Red Hat Enterprise Linux 버전을 사용하는 경우에도 적용됩니다.
4.2.5. GCC Toolset 15의 annobin 세부 사항 링크 복사링크가 클립보드에 복사되었습니다!
경우에 따라 GCC Toolset 15의 annobin 과 gcc 간의 동기화 문제로 인해 다음과 유사한 오류 메시지와 함께 컴파일이 실패할 수 있습니다.
cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-15/root/usr/lib/gcc/_architecture_-linux-gnu/15/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory
플러그인 디렉터리로 변경합니다.
$ cd /opt/rh/gcc-toolset-15/root/usr/lib/gcc/architecture-linux-gnu/15/pluginannobin.so에서
gcc-에 심볼릭 링크를 만듭니다.annobin.so$ ln -s annobin.so gcc-annobin.so
아키텍처를 시스템에서 사용되는 아키텍처로 교체합니다.
-
aarch64 -
i686 -
ppc64le -
s390x -
x86_64