C ++バイナリを探索している間にdynが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)
私の質問は次のとおりです
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
このサフィックスはなぜ
6
そんなに人気がありますか?libc.so.7
いつリリースされるのか時刻表はありますか?
答え1
6 サフィックスは歴史的な理由で使用されます。man libc
Linuxで。デフォルトでは、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