17장. 컴파일러 및 개발 도구

이 장에서는 RHEL 8과 RHEL 9 간의 컴파일러 및 개발 툴에 대한 가장 중요한 변경 사항을 설명합니다.

17.1. glibc에 대한 주요 변경 사항

이제 모든 스레드 API가 libc.so.6에 병합되었습니다.

RHEL 8에서 시스템 스레드 라이브러리인 libpthread.so 는 별도의 라이브러리였습니다. RHEL 9에서는 모든 스레드 API가 코어 C 라이브러리 libc.so.6 에 병합되었습니다. 코어 C 라이브러리로 스레딩을 이동하면 라이브러리에서 기본적으로 스레드를 지원할 수 있습니다. 단일 파일을 사용하면 스레드 API와 코어 C, POSIX 및 BSD API가 모두 동시에 업데이트되므로 내부 업그레이드 프로세스가 원활하게 수행됩니다.

개발자는 스레드된 애플리케이션을 연결할 때 -lpthread 옵션을 계속 사용할 수 있지만 더 이상 필요하지 않습니다.

이전에는 라이브러리에서 pthread_create 또는 pthread_cancel 에 약한 참조를 사용하여 프로세스를 멀티 스레드일 수 있는지 탐지했습니다. libpthread.so 가 이제 핵심 C 라이브러리에 있기 때문에 이 검사가 항상 성공하므로 라이브러리는 이를 위해 __libc_single_threaded 기호를 사용해야 합니다.

libdl 라이브러리가 libc.so.6에 병합되었습니다.

RHEL 8에서 libd l 라이브러리 는 별도의 라이브러리였습니다. RHEL 9에서는 libdl 라이브러리가 코어 C 라이브러리 libc.so.6 에 병합되었습니다. 즉, dlsym 함수를 연결하는 것이 훨씬 더 어려워지고 있습니다. 기호 확인 작동 방식을 제어해야 하는 애플리케이션은LD_AUDIT(감사자) 인터페이스로 전환해야 합니다.

이제 libc.so.6에 병합된 dns파일 의 이름 서비스 스위치 서비스 플러그인

RHEL 8에서 파일 의 Name Service Switch(NSS) 서비스와 사용자 및 그룹 ID 관리 API에 데이터를 제공하는 dns 는 별도의 플러그인이었습니다. RHEL 9에서는 플러그인이 코어 C 라이브러리 libc.so.6에 병합되었습니다. 파일과 dns 서비스 공급자를 이동하면 마운트 네임스페이스 경계를 교차해야 하는 애플리케이션이 (예: 컨테이너 입력) 프로세스 시작 시 NSS 파일과 dns 액세스 서비스가 항상 로드되도록 할 수 있습니다.

해당 API가 파일 또는 dns 를 참조하는 nsswitch.conf 를 사용하는 사용자 및 그룹 API를 호출할 때 개발자는 해당 서비스가 항상 존재하고 기본 서비스 데이터를 제공할 수 있습니다.