Что означает «6» в glibc.so.6?

Что означает «6» в glibc.so.6?

При исследовании двоичного файла C++ я обнаружил, что libstdc++.so.6он динамически связан с libm.so.6и libc.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. По сути, в Linux использовалась форк библиотеки GNU C; она выпустила основные версии с 2 по 5. Версия 5 использовала ELF и была опубликована с общей библиотекой soname libc.so.5. Когда версия 2 библиотеки GNU C была выпущена на Linux, она использовала общую библиотеку soname, libc.so.6чтобы избежать путаницы с более ранними библиотеками.

Связанные библиотеки используют тот же суффикс. Некоторые архитектуры используют немного другой суффикс; например, библиотека GNU C на Alpha и Itanium — libc.so.6.1.

Библиотека GNU C имеет прочную историю обратной совместимости и использует множество различных механизмов для поддержки внесения существенных изменений без нарушения старых двоичных файлов (включая версионные символы). Новое soname ( libc.so.7) будет использоваться только в случае, если критически важное изменение, которое нельзя было бы смягчить, было бы абсолютно необходимо, поэтому маловероятно, что мы увидим его в ближайшее время.

решение2

Это ABI (Двоичный интерфейс приложения) версия.

Он увеличивается только при внесении критических изменений, чего теперь настоятельно не следует делать libc, поэтому большинство дистрибутивов работают libc.so.6уже некоторое время.

В целом, это позволяет нескольким несовместимым версиям библиотеки существовать в системе одновременно, поддерживая различные приложения, созданные для разных версий.

Например, Ubuntu 18.04 предоставляет libcurl.so.3(через пакет libcurl3) и libcurl.so.4(через пакет libcurl4), оба построены на основе cURL версии 7.58.0.

Связанный контент