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 libcLinuxで。デフォルトでは、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

関連情報