4.14. 컴파일러 및 개발 도구
업데이트된 GCC 컴파일러가 RHEL 9.1에서 사용 가능
시스템 GCC 컴파일러 버전 11.2.1은 업스트림 GCC에서 사용 가능한 수많은 버그 수정 및 개선 사항을 포함하도록 업데이트되었습니다.
GNU 컴파일러 컬렉션(GCC)은 C, C++ 및 Fortran 프로그래밍 언어를 사용하여 애플리케이션을 개발하기 위한 툴을 제공합니다.
사용법 정보는 RHEL 9에서 C 및 C++ 애플리케이션 개발을 참조하십시오.
새로운 GCC Toolset 12
GCC Toolset 12는 최신 버전의 개발 툴을 제공하는 컴파일러 툴셋입니다. AppStream
리포지토리에서 소프트웨어 컬렉션 형식으로 Application Stream으로 사용할 수 있습니다.
GCC 컴파일러는 업스트림 GCC에서 제공되는 많은 버그 수정 및 개선 사항을 제공하는 12.1.1 버전으로 업데이트되었습니다.
GCC Toolset 12에서 다음 도구 및 버전을 제공합니다.
툴 | 버전 |
---|---|
GCC | 12.1.1 |
GDB | 11.2 |
binutils | 2.35 |
dwz | 0.14 |
annobin | 10.76 |
GCC Toolset 12를 설치하려면 root로 다음 명령을 실행합니다.
# dnf install gcc-toolset-12
GCC Toolset 12에서 툴을 실행하려면 다음을 수행합니다.
$ scl enable gcc-toolset-12 tool
GCC Toolset 12의 툴 버전이 다음 툴의 시스템 버전을 덮어쓰는 쉘 세션을 실행하려면 다음을 수행합니다.
$ scl enable gcc-toolset-12 bash
자세한 내용은 GCC Toolset 12 를 참조하십시오.
(BZ#2077465)
GCC Toolset 12: Annobin이 버전 10.76에 다시 기반
GCC Toolset 12에서 Annobin 패키지가 버전 10.76로 업데이트되었습니다.
주요 버그 수정 및 개선 사항은 다음과 같습니다.
-
nocheck에 대한 새로운 명령줄 옵션은
debuginfod
서비스를 사용하지 않도록 지시합니다. 디버그 정보를 찾을 수 없는 경우 다른 방식으로 디버그 정보를 찾을 수 없습니다.debuginfod
를 사용하면 추가 정보가 포함된 annocheck를 제공하지만debuginfod
서버를 사용할 수 없는 경우nocheck의 성능이 저하될 수도 있습니다. -
이제 Annobin 소스를 구성하는 대신
meson
및ninja
를 사용하여 구축할 수 있습니다. - Annocheck는 이제 Rust 1.18 컴파일러에서 빌드한 바이너리를 지원합니다.
또한 다음 알려진 문제는 GCC Toolset 12 버전의 Annobin에서 보고되었습니다.
경우에 따라 다음과 유사한 오류 메시지와 함께 컴파일이 실패할 수 있습니다.
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
(BZ#2077438)
GCC Toolset 12: binutils
버전 2.38으로 다시 기반
GCC Toolset 12에서 binutils
패키지가 2.38 버전으로 업데이트되었습니다.
주요 버그 수정 및 개선 사항은 다음과 같습니다.
-
binutils
패키지의 모든 도구는 이제 다중 바이트 문자를 표시하거나 경고하는 옵션을 지원합니다. -
readelf
및objdump
툴은 기본적으로 별도의debuginfo
파일에 대한 링크를 자동으로 따릅니다.readelf
에--debug-dump=no-follow-links
옵션을 사용하거나objdump
에--dwarf=no-follow-links
옵션을 사용하여 이 동작을 비활성화할 수 있습니다.
(BZ#2077445)
GCC 12 이상에서는 _FORTIFY_SOURCE
수준 3을 지원합니다.
이 향상된 기능을 통해 사용자는 GCC 버전 12 이상으로 빌드할 때 컴파일러 명령줄에서 -D_FORTIFY_SOURCE=3
을 사용하여 애플리케이션을 빌드할 수 있습니다. _FORTIFY_SOURCE
수준 3은 소스 코드 강화 범위를 개선하여 컴파일러 명령줄에서 -D_FORTIFY_SOURCE=3
으로 빌드된 애플리케이션의 보안을 개선합니다. 이는 GCC 버전 12 이상 및 RHEL 9의 모든 Clang에서 지원되며 __builtin_dynamic_object_size
가 내장된 것입니다.
DNS stub resolver 옵션에서 no-aaa
옵션을 지원
이번 개선된 기능을 통해 glibc
는 이제 /etc/resolv.conf
및 RES_OPTIONS
환경 변수에서 no-aaaa
stub resolver 옵션을 인식합니다. 이 옵션이 활성화되면 네트워크를 통해 AAAA 쿼리가 전송되지 않습니다. 시스템 관리자는 IPv4 전용 네트워크의 상위 조회가 DNS 문제에 기여하지 않는 등 진단 목적으로 AAAA DNS 조회를 비활성화할 수 있습니다.
IBM Z Series z16에 대한 지원 추가
IBM z16
플랫폼과 함께 s390
명령어 세트에 대한 지원이 제공됩니다. IBM z16
은 HWCAP_S390_VXRS_PDE2
및 HWCAP_S390_NNPA
인 glibc
에서 두 가지 추가 하드웨어 기능을 제공합니다. 그 결과 애플리케이션에서 이러한 기능을 사용하여 최적화된 라이브러리 및 기능을 제공할 수 있습니다.
(BZ#2077838)
애플리케이션은 새로운 glibc
인터페이스를 통해 재시작 가능한 시퀀스 기능을 사용할 수 있습니다.
sched_getcpu
함수(특히 aarch64에서) 가속화하려면 glibc
에서 기본적으로 재시작 가능한 시퀀스(rseq) 커널 기능을 사용해야 합니다. 애플리케이션이 공유 rseq 영역을 지속적으로 사용할 수 있도록 glibc는 이제
2.35 업스트림 버전에서 처음 추가된 glibc
__rseq_offset
,__rseq_size
및 __rseq_flags
기호를 제공합니다. 이번 개선된 기능을 통해 sched_getcpu
함수의 성능이 향상되고 애플리케이션에서 새 glibc
인터페이스를 통해 재시작 가능한 시퀀스 기능을 사용할 수 있습니다.
GCC Toolset 12: GDB 기반 버전 11.2
GCC Toolset 12에서는 GDB 패키지가 버전 11.2로 업데이트되었습니다.
주요 버그 수정 및 개선 사항은 다음과 같습니다.
-
64비트 ARM 아키텍처 메모리 태그 확장(MTE)에 대한 새로운 지원
memory-tag
접두사가 있는 새 명령을 참조하십시오. -break-insert
및-dprintf-insert
에 대한--qualified
옵션입니다. 이 옵션은 모든 범위에서 검색하는 대신 사용자의 이벤트 위치와 정확히 일치합니다.예를 들어
break --qualified foo
는 전역 범위에서 foo 라는 기호를 찾습니다. GDB는--qualified
을 사용하지 않으면 해당 이름의 모든 범위에 대한 기호를 검색합니다.-
--force-condition
: 현재 유효하지 않은 경우에도 제공된 모든 조건이 정의됩니다. -
-break-condition --force
: Like command. -
-file-list-exec-source-files
는 선택적REGEXP
를 사용하여 출력을 제한할 수 있습니다. .gdbinit
검색 경로에는 구성 디렉터리가 포함됩니다. 순서는 다음과 같습니다.-
$XDG_CONFIG_HOME/gdb/gdbinit
-
$HOME/.config/gdb/gdbinit
-
$HOME/.gdbinit
-
-
~/.config/gdb/gdb/gdbearlyinit
또는~/.gdbearlyinit
에 대한 지원 -
-eix
및-eiex
초기 초기화 파일 옵션
터미널 사용자 인터페이스(TUI):
- 터미널 사용자 인터페이스(TUI) 창 내에서 마우스 작업을 지원합니다.
- 이제 집중된 창에서 작동하지 않는 키 조합이 GDB로 전달됩니다.
새 명령:
-
print memory-tag-violations 표시
-
print memory-tag-violations 설정
-
memory-tag show-logical-tag
-
memory-tag with-logical-tag
-
memory-tag show-allocation-tag
-
memory-tag 검사
-
start-quietly
및set startup-quietly
: GDB 스크립트에서-q
또는-quiet
을 지정하는 방법입니다. 초기 초기화 파일에서만 유효합니다. -
인쇄 유형 16진수를 표시하고
인쇄 유형 16진수 : 10진수 대신 16진수로 구조 멤버의 크기 또는 오프셋을 Tells GDB로 설정합니다
. -
python ignore-environment를 표시하고
python ignore-environment를 설정하면
GDB의 Python 인터프리터는 Python 환경 변수를 무시하고 Python 실행 파일에-E
를 전달합니다. 초기 초기화 파일에서만 유효합니다. -
python dont-write-bytecode를 표시하고
python dont-write-bytecode를 설정합니다
: 이 명령은 GDB의 Python 인터프리터가 가져온 모듈의 바이트 코드 컴파일된 객체를 작성하지 못하도록 합니다.초기 초기화 파일에서만 유효합니다.
변경된 명령:
-
CONDITION
인 경우 중단 : CONDITION
이 유효하지 않은 경우 GDB에서 DestinationRule을 설정하지 않습니다.-force-condition
옵션은 이를 덮어씁니다. -
CONDITION -force N COND
: 이전 명령과 동일합니다. -
Inferior [ID]
: ID가 생략되면 이 명령은 현재 유추에 대한 정보를 출력합니다. 그렇지 않으면 변경되지 않습니다. -
ptype[/FLAGS] TYPE | EXPRESSION
:/x
플래그를 사용하여 struct 멤버의 크기 및 오프셋을 출력할 때 16진수 표기법을 사용합니다./d
플래그를 사용하여 10진수를 사용하여 동일한 작업을 수행합니다. -
정보 소스
: 출력이 재구성되었습니다.
Python API:
-
Inferior 오브젝트에는 읽기 전용
connection_num
특성이 포함되어 있습니다. -
새로운
gdb.ECDHE.level()
메서드. -
새로운
gdb.PendingECDHE.level()
메서드. -
gdb.Stop
대신 출력되는 GDB.BreakpoiontEvent
(BZ#2077494)
GDB에서 Power 10 PLT 명령을 지원
GDB는 이제 Power 10 PLT 명령을 지원합니다. 이번 업데이트를 통해 사용자는 공유 라이브러리 함수로 들어가서 GDB 버전 10.2-10 이상을 사용하여 스택 백트레이스를 검사할 수 있습니다.
(BZ#1870017)
버전 12.1에 따라 패키지된 dyninst
dyninst
패키지는 버전 12.1로 업데이트되었습니다. 주요 버그 수정 및 개선 사항은 다음과 같습니다.
-
glibc-2.35
여러 네임스페이스에 대한 초기 지원 - DWARF 병렬 구문 분석에 대한 동시성 수정
-
CUDA
및CDNA2
GPU 바이너리 지원 개선 - IBM POWER Systems(little endian) 레지스터 액세스 개선
- PIE 바이너리 지원 개선
- catch 블록에 대한 수정된 구문 분석
-
64비트ECDHE(
arch64
) 부동 소수점 레지스터에 대한 액세스 수정
새로운 파일 세트 /etc/profile.d/debuginfod.*
조직 debuginfod 서비스를 활성화하기 위한 새로운 파일 세트 추가 시스템 전체의 debuginfod
클라이언트 활성화를 가져오려면 URL을 /etc/debuginfod/FOO.urls
파일에 추가해야 합니다.
Rrust Toolset 버전 1.62.1에 따라 업데이트
Rust가 1.62.1 버전으로 업데이트되었습니다. 주요 변경 사항은 다음과 같습니다.
-
할당 종료를 사용하면 패턴이 할당 왼쪽의 기존 변수에 할당할 수 있습니다. 예를 들어 DestinationRule 할당은 (a,
b) = (b, a)
변수로 스왑할 수 있습니다. -
이제
core::arch::asm!
매크로를 사용하는 64비트 x86 및 64비트 ARM에서 인라인 어셈블리가 지원됩니다. 참조의 "인라인 어셈블리" 장에서 자세한 내용은/usr/share/doc/rust/html/reference/inline-assembly.html
( https://doc.rust-lang.org/reference/inline-assembly.html)에서 참조하십시오. -
이제 dotnets는 명시적으로 주석이 있는
#[default]
변형을 사용하여Default
특성을 도출할 수 있습니다. -
이제
CondVar
, CondVar ,
RwLock
은 pthreads가 아닌 사용자 정의futex
기반 구현을 사용하며 Rust 언어를 통해 새로운 최적화를 가능하게 합니다. -
Rust는 이제 새로 설정된 종료 특성을 구현하는 사용자 정의 유형을 포함하여
기본
종료
코드의 사용자 정의 코드를 지원합니다. -
dependency 기능에 대한 더 많은 제어 기능을 지원합니다.
dep:
접두사는 기능을 노출하지 않고 선택적 종속성을 참조할 수 있으며,?
는패키지 이름?/feature-name
과 같이 해당 종속성이 다른 위치에서 활성화된 경우에만 종속성 기능을 활성화합니다. -
3.3.2
ml에 종속 항목을 추가하는 새로운
있습니다.기능
추가 하위 명령이 자세한 내용은 업스트림 릴리스 시리즈를 참조하십시오.
(BZ#2075337)
LLVM Toolset 버전 14.0.6
LLVM Toolset은 14.0.6 버전으로 업데이트되었습니다. 주요 변경 사항은 다음과 같습니다.
-
64비트 x86에서는
AVX512-FP16
명령에 대한 지원이 추가되었습니다. - ECDHEv9-A,ECDHEv9.1-A 및ECDHEv9.2-A 아키텍처가 추가되었습니다.
-
PowerPC에서
__ibm128
유형을 추가하여 IBM 이중 실행 형식을 나타내며__attribute__(mode(IF))
로도 사용할 수 있습니다.
Clang 변경
:
-
C++2b
에 대한 Consteval이 이제 구현되어 있는 경우
-
64비트 x86에서는
AVX512-FP16
명령에 대한 지원이 추가되었습니다. -
실험 상태의 OpenCL C 3.0 및
C++
for OpenCL 2021에 대한 지원이 완료되었습니다. -
-E -P
사전 프로세서 출력은 이제 항상 GCC 동작과 일치하는 빈 행을 생략합니다. 이전에는 최대 8개의 연속 빈 줄이 출력에 표시될 수 있었습니다. -
지원
-
C89뿐만 아니라 GCC의 동작과 일치합니다. 주목할 만한 사용 사례는 선언 및 코드를 혼합하는 것을 금지하지만 최신 C 표준으로 이동하려는 스타일 가이드를 지원하는 것입니다.C99
및 이후 표준을 사용한 후
자세한 내용은 LLVM Toolset 및 Clang 업스트림 릴리스 노트를 참조하십시오.
(BZ#2061041)
Toolset 다시 기반 버전 1.18.2
Go Toolset이 버전 1.18.2로 업데이트되었습니다.
주요 변경 사항은 다음과 같습니다.
- 이전 버전의 Go와 이전 버전과의 호환성을 유지하면서 일반 일반이 도입되었습니다.
- 새로운 퍼지셔닝 라이브러리입니다.
-
새로운
debug
/buildinfo
및net
/netip
패키지. -
go get
툴은 더 이상 패키지를 빌드하거나 설치하지 않습니다. 이제go.mod
에서만 종속성을 처리합니다. -
기본 모듈의
go.mod
파일이1.17
이상을 지정하는 경우 추가 인수 없이 사용된go mod download
명령은 기본 모듈의go.mod
파일에 명시적으로 필요한 모듈에 대한 소스 코드만 다운로드합니다. 또한 전송 종속 항목에 대한 소스 코드를 다운로드하려면go mod download all
명령을 사용합니다. -
go mod vendor
하위 명령은 이제 출력 디렉터리를 설정하는-o
옵션을 지원합니다. -
이제
go mod tidy
명령으로 빌드 목록의 하나의 모듈만 가져온 각 패키지를 제공하는지 확인하는 데 소스 코드가 필요한 모듈에 대해go.sum
파일에 추가 체크섬이 유지됩니다. 이 변경 사항은 기본 모듈의go.mod
파일의 Go 버전에서 조건이 지정되지 않습니다.
(BZ#2075169)
새 모듈 스트림: maven:3.8
RHEL 9.1에서는 Maven 3.8
을 새 모듈 스트림으로 도입합니다.
maven:3.8
모듈 스트림을 설치하려면 다음을 사용합니다.
# dnf module install maven:3.8
(BZ#2083112)
.NET 버전 7.0 사용 가능
Red Hat Enterprise Linux 9.1은 .NET 버전 7.0과 함께 배포됩니다. 주요 개선사항은 다음과 같습니다.
-
IBM Power 지원 (
ppc64le
)
자세한 내용은 .NET 7.0 RPM 패키지용 릴리스 정보 및 . NET 7.0 컨테이너용 릴리스 노트 를 참조하십시오.
(BZ#2112027)