古い共有ライブラリを使用するアプリケーションをどのように処理しますか?

古い共有ライブラリを使用するアプリケーションをどのように処理しますか?

libncurses.so.5を探しているLinuxローリングリリースバージョンでGDBを実行しようとしていますが、システムにバージョン6がインストールされています。人々がlnを使用してlibncurses.so.5をバージョン6にリンクするソリューションを見たことがありますが、これは良い習慣ではないようです(最新のエントリは廃止されたか削除された可能性があります)。

既存のライブラリを新しいライブラリにリンクすることは許可されていますか、それとも良い方法がありますか?

特定の問題の詳細:

  • カーネル5.8を使用したManjaro Linux
  • pacmanリポジトリにアプリケーション(STCubeIDE)がインストールされていません(手動インストール)。

答え1

既存のライブラリを新しいライブラリにリンクすることは許可されていますか?

いいえ。

バイナリの非互換性により、プログラムがいつでも中断される可能性があります。通常、配布ツール(など)を使用することに加えて、システムファイル(以下のすべての項目)を操作するのは/usr愚かな考えです。aptyum

これを行うより良い方法はありますか?

古いライブラリ(以下のような/opt/oldlibs)を保持し、プログラムがLD_LIBRARY_PATH環境変数を介してそれを使用するようにします。詳しくはld.so(8)マンページ。

答え2

既存のライブラリを新しいライブラリにリンクすることは許可されていますか、それとも良い方法がありますか?

使用されている機能によっては機能する場合と動作しない場合があります。

これは一般的に悪い習慣ですが、古いライブラリを追跡したくないので、既存のアプリケーションがこの核を使用できる場合、誰も反対しません。

答え3

いいえ - 彼によるとウェブサイト、Manjaroにはncurses 6.2があり、Archのパッケージを再利用するので、パッケージビルドスクリプトは、ncurses 5とバイナリ互換性のないABI 6を使用していることを伝えます。

たとえば、gdbにはncursesを使用して端末にデバッグ情報を表示するモードがあります。 ncurses5 をコンパイルした後に ncurses6 を強制すると、強調表示と線の描画文字が正しく表示されません。 ABI 5とABI 6では、画面に表示される各セルのデータ構造サイズが異なるためです。

これを行い(ncurses5のふりをするためにncurses6ライブラリへのリンク)、バグを報告しようとすると、リリースノートのみが表示されます(例:ncurses 6.0)とよくある質問

同様のものを維持する必要がある場合は、ABI 5用のncursesをコンパイルします。 (文書に示すように、ncurses6を使用してこれを実行できます。基本構成スクリプトの値が変更されました。)

関連情報