7장. 컴파일러 및 개발 도구
다음 장에서는 RHEL 8과 RHEL 9 간의 컴파일러 및 개발 툴에 대한 주요 변경 사항을 설명합니다.
7.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를 호출할 때 개발자는 해당 서비스가 항상 존재하고 기본 서비스 데이터를 제공할 수 있습니다.