バージョンが同じであれば、共有ライブラリABIは互換性がありますか?

バージョンが同じであれば、共有ライブラリABIは互換性がありますか?

システム(Ubuntu x64など)でlibc.so.6に関連付けられているプログラムをコンパイルするとします。このバイナリを同じlibcバージョン6(Fedora x64など)を使用する別のシステムにインポートすると、正常に動作するようです。

私の質問は、soバージョンが同じである限り、ABIが安定していることをどのくらいの契約ですか?

答え1

いいえ、共有ライブラリはディストリビューション全体でABIと互換性がある必要はありません。私はそれが合理的な期待だと思いますが、ABIの中断が発生するため、ABIの互換性に盲目的に依存することはできません。

例は次のとおりですlibstdc++。 Ubuntu 16.04(GCC 5を含む)とCentOS 7(GCC 4.8を含む)では、そのsoエントリは次の場所にあります。ABI割り込み。設定なしでUbuntu 16.04でC ++にコンパイルされたソフトウェアは_GLIBCXX_USE_CXX11_ABICentOS 7では動作しません。 ABIの中断は、通常、バグ修正のメジャーバージョン番号をlibstc++.so.6変更しないDeployment Managerによって適用されたバグ修正パッチでも発生する可能性があります。so

関連情報