ライブラリがロードされていることを確認したい場合 場合のみ プログラム lunar-calendar-gtk
これを適用できます:
コマンドにプレフィックスを付けて、コマンドごとに環境変数を設定します:
$ LD_PRELOAD="liblunar-calendar-preload.so" printenv "LD_PRELOAD"
liblunar-calendar-preload.so
$ printenv "LD_PRELOAD"
$
次に、これをシェルスクリプトに入れて lunar-calendar-gtk
にすることを選択できます 元のリファレンスを置き換える、このシェル スクリプトへのシンボリック リンク。これにより、元のアプリケーションが実行されるたびにライブラリが確実に読み込まれるようになります。
元の lunar-calendar-gtk
の名前を変更する必要があります アンインストールとアップグレードで問題が発生する可能性があるため、あまり興味をそそられない可能性があります。ただし、以前のバージョンの Skype では便利でした。
回答ありがとうございます。今、問題を解決したと思います.
LD_PRELOAD は一部のライブラリを proload するためのものなので、LD_PRELOAD で ld がプリロードするライブラリを確認します。そのうちの 1 つは、パス「/usr/lib/liblunar-calendar-」に存在しない「liblunar-calendar-preload.so」です。 preload.so」ですが、以前のものの差分バージョンである同様のライブラリ「liblunar-calendar-preload-2.0.so」を見つけました。
次に、システムが更新されたときにliblunar-calendar-preload.soが2.0バージョンに更新され、LD_PRELOADが「/usr/lib/liblunar-calendar-preload.so」のままになった可能性があると思います。したがって、プリロード ライブラリ名は最新バージョンに更新されませんでした。
環境変数の変更を避けるために、パス "/usr/lib" の下にシンボリック リンクを作成します
sudo ln -s liblunar-calendar-preload-2.0.so liblunar-calendar-preload.so
次に、bash を再起動すると、エラーはなくなりました。
リンカーはいくつかの環境変数を考慮に入れます。 1 つは LD_PRELOAD
です
man 8 ld-linux
から :
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF
shared libraries to be loaded before all others. This can be
used to selectively override functions in other shared
libraries. For setuid/setgid ELF binaries, only libraries in
the standard search directories that are also setgid will be
loaded.
したがって、リンカーは LD_PRELOAD
にリストされているライブラリをロードしようとします。 変数が読み込まれる前に。
変数内に、事前にロードできないライブラリがリストされている可能性があります。あなたの .bashrc
の中を見てください または .bash_profile
LD_PRELOAD
が存在する環境 が設定され、そのライブラリを変数から削除します。