리눅스 GLIBC 패키지란? 호환성 문제에 대해

컴퓨터 프로그램은 기본적인 기능을 수행하기 위해 운영체제와 상호 작용해야 합니다. 예를 들어, 파일을 읽거나 쓰고, 메모리를 할당하거나 해제해야 합니다. 이런 작업을 수행하기 위한 인터페이스들이 있는데요. 이런 기본적인 인터페이스를 제공하는 게 glibc입니다. 리눅스에서 glibc는 GNU 프로젝트의 C 라이브러리를 나타냅니다. GNU 프로젝트는 1983년에 시작된 공개 소프트웨어 프로젝트로 현재 리눅스 배포판에는 대부분 glibc가 포함되어 있습니다.

GLIBC

glibc는 C와 C++ 프로그램이 운영체제와 상호작용할 수 있도록 시스템 호출, 기본 데이터 구조, 알고리즘, 스레드 지원, 수학 함수, 입력/출력 등과 같은 기본 런타임 기능을 제공합니다. 때문에 대부분의 리눅스 배포판은 기본 C 라이브러리로 glibc를 사용한다고 보셔도 됩니다. 예를 들어 libc, libnsl, libcrypt, libnss 등 주요 라이브러리가 glibc에 포함됩니다.

 

GLIBC 버전 및 호환성 문제

glibc는 꾸준히 개발되고 있습니다. 배포판 별로 버전이 다르게 사용될 수 있는데, 프로그램을 사용할 때 glbic 버전에 따라 호환성 문제가 발생할 수 있습니다.

 

예를 들어, 바이너리로 실행 가능한 nginx를 어떤 glbic 버전에서는 실행할 수가 없습니다. nginx가 필요로하는 glibc 내 라이브러리 버전이 호환되지 않기 때문입니다. 프로그램이 라이브러리에 의존하고 있는데, 라이브러리 버전이 바뀌면 함수, 데이터 구조, 크기, 정렬, 변수 등이 변경될 수 있습니다.

 

가령 특정 .so 파일의 버전이 .so.1에서 .so.2로 변경되는 경우 프로그램과 라이브러리 간의 바이너리 인터페이스를 정의한 ABI (Application Binary Interface)에도 변화가 생길 수 있기 때문에 상위 버전이라도 하위 버전과 호환이 되지 않는 케이스가 있습니다. 물론 항상 그런 건 아니고 호환이 되는 경우도 있습니다.

반응형

댓글

Designed by JB FACTORY