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

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

C++ 바이너리를 탐색할 때 이것이 and libstdc++.so.6에 dyn 링크되어 있음 을 발견했습니다 .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 버전인 줄 알았는데, 버전이 인데 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를 사용했으며 libc.so.5. GNU C 라이브러리 버전 2가 Linux에 출시되었을 때 libc.so.6이전 라이브러리와의 혼동을 피하기 위해 공유 라이브러리 soname을 사용했습니다.

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

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

답변2

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

이는 획기적인 변경이 있을 때만 증가하며, 현재는 이를 강력히 피하므로 대부분의 배포판은 한동안 libc켜져 있었습니다 .libc.so.6

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

예를 들어 Ubuntu 18.04는 libcurl.so.3(패키지를 통해 libcurl3) 및 libcurl.so.4(패키지를 통해 libcurl4) 모두 cURL 버전 7.58.0에서 빌드되었습니다.

관련 정보