glibc.so.6의 "6"은 무엇을 의미합니까?

glibc.so.6의 "6"은 무엇을 의미합니까?

C++ 바이너리를 탐색하는 동안 dyn이 및 libstdc++.so.6에 연결되어 있음 을 발견했습니다 .libm.so.6libc.so.6

$ ldd /lib/x86_64-linux-gnu/libstdc++.so.6 
        linux-vdso.so.1 (0x00007ffcb737b000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd3b2295000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3b1c00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd3b2396000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd3b2275000)

내 질문은 다음과 같습니다

  1. 6이름은 무엇을 의미합니까? 원래는 glibc 버전인줄 알았는데 알고보니 glibc 버전 2.35과 똑같 더군요 6.

    $ strings /lib/x86_64-linux-gnu/libc.so.6  | grep GLIBC_2.3
    GLIBC_2.3
    ...
    GLIBC_2.35
    
  2. 이 접미사가 왜 6그렇게 인기가 있습니까?

  3. libc.so.7언제 출시되는지 시간표가 있나요?

답변1

6 접미사는 역사적인 이유로 사용됩니다.man libc리눅스에서. 기본적으로 Linux에서는 GNU C 라이브러리의 포크가 사용됩니다. 이번에는 주요 버전 2부터 5까지 출시되었습니다. 버전 5는 ELF를 사용하며 공유 라이브러리 soname 으로 배포됩니다 libc.so.5. GNU C 라이브러리 버전 2가 Linux에 출시되었을 때 libc.so.6이전 라이브러리와의 혼동을 피하기 위해 공유 라이브러리 soname을 사용했습니다.

관련 라이브러리는 동일한 접미사를 사용합니다. 일부 아키텍처는 약간 다른 접미사를 사용합니다. 예를 들어 Alpha 및 Itanium의 GNU C 라이브러리는 libc.so.6.1.

GNU C 라이브러리는 이전 버전과의 호환성에 대한 강력한 역사를 갖고 있으며 다양한 메커니즘을 사용하여 이전 바이너리(버전이 지정된 기호 포함)를 손상시키지 않고 주요 변경 사항의 도입을 지원합니다. 새로운 soname()은 완화할 수 없는 주요 변경 사항이 절대적으로 필요한 경우에만 사용되므로 libc.so.7조만간 그러한 변경 사항을 볼 가능성은 거의 없습니다.

답변2

이것이 ABI(애플리케이션 바이너리 인터페이스) 버전.

이는 주요 변경이 이루어질 때만 증가하며 현재는 이를 강력히 방지하므로 대부분의 배포판에서는 한동안 libc이 작업이 작동했습니다 .libc.so.6

일반적으로 이를 통해 호환되지 않는 여러 버전의 라이브러리가 시스템에 동시에 존재할 수 있으며, 다양한 버전용으로 구축된 다양한 애플리케이션을 지원할 수 있습니다.

예를 들어 Ubuntu 18.04는 cURL 버전 7.58.0에서 빌드된 libcurl.so.3(패키지를 통해 libcurl3) 및 libcurl.so.4(패키지를 통해 )을 제공합니다.libcurl4

관련 정보