
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 のバージョンだと思っていましたが、バージョンは であり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 では、基本的に GNU C ライブラリのフォークが使用され、メジャー バージョン 2 から 5 がリリースされました。バージョン 5 は ELF を使用し、共有ライブラリ soname で公開されましたlibc.so.5
。GNU C ライブラリのバージョン 2 が Linux でリリースされたとき、以前のライブラリとの混乱を避けるために共有ライブラリ soname が使用されましたlibc.so.6
。
関連するライブラリは同じサフィックスを使用します。一部のアーキテクチャでは若干異なるサフィックスを使用します。たとえば、Alpha および Itanium 上の GNU C ライブラリは ですlibc.so.6.1
。
GNU C ライブラリには、後方互換性の強力な歴史があり、さまざまなメカニズムを使用して、古いバイナリ (バージョン管理されたシンボルを含む) を壊すことなく重要な変更を導入できるようにサポートしてlibc.so.7
います。新しい soname ( ) は、軽減できない重大な変更が絶対に必要な場合にのみ使用されるため、すぐには使用されない可能性があります。
答え2
それはABI(アプリケーションバイナリインターフェース) バージョン。
これは、破壊的な変更が行われた場合にのみ増加されますが、現在では ではそのような変更は強く避けられているため、ほとんどのディストリビューションではしばらく前libc
から有効になっています。libc.so.6
一般的に、ライブラリの複数の互換性のないバージョンがシステム上に同時に存在することを可能にし、異なるバージョン用に構築されたさまざまなアプリケーションをサポートします。
たとえば、Ubuntu 18.04 ではlibcurl.so.3
(パッケージ 経由libcurl3
) とlibcurl.so.4
(パッケージ 経由libcurl4
) が提供されており、どちらも cURL バージョン 7.58.0 からビルドされています。