46

ubuntu12.04を使用しています。bash ターミナルを起動するたびに、コマンドの入力を終了するたびに (Enter キーを押す)、次のメッセージが表示されます。

エラー: ld.so: LD_PRELOAD からのオブジェクト '/usr/lib/liblunar-calendar-preload.so' をプリロードできません: 無視されます。

それは変だね。では、環境変数 LD_PRELOAD は何のために使用されるのでしょうか? そして、舞台裏で何が起こっているのですか?

ありがとう。

4

7 に答える 7

18

リンカーはいくつかの環境変数を考慮に入れます。一つは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そのライブラリを変数から削除します。

于 2013-07-18T12:47:40.177 に答える
9

プログラムが起動された場合にのみライブラリがロードされるようにしたい場合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 では便利でした。

于 2013-08-28T10:16:54.623 に答える
0

Raspberry Pi に Citrix クライアントをインストールしたときに、このタイプのエラーが発生しました。要するに、ファイル /etc/ld.so.preload があります。私のシステムが不満を言っているライブラリは、そのファイルにリストされていました。# でコメントアウトすると、システムは文句を言わなくなりました。

于 2021-11-05T00:59:39.300 に答える