7

を変更すると、奇妙な副作用がありLD_LIBRARY_PATHます。

ライブラリを含むパスを追加すると、たとえば次のようになります。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib

その後、すべてが信じられないほど遅くなります。たとえば、simplelsは 10 秒の長さにすることができます。

ldd出力は変更の前後でまったく同じLD_LIBRARY_PATHであり、スローの実行をデバッグしようとしましたls:straceどちらの場合もまったく同じ実行が得られます。の実行中に実行がスタックすることさえありませんls( strace10 秒のラグの間に何も出力せず、突然完全に実行されるためls)。だから私はそれが私のシェルから来るかもしれないと思ったが、これは同じで、strace私のbashで実行lsし、両方の場合で実行すると同じstrace出力が得られる:シェルが実行lsされ、その実行の終了を待つ(straceラグの前の最後の出力stracewaitpid(...))。だから私は何か問題がの打ち上げの間に起こると思いますlsカーネルレベルの問題であるかのように、その実行。これは、aが(0 cpu 使用量)sleepで作成されたかのように機能します。ls

ラグの間、私の CPU とネットワーク アクティビティは完全に正常です...

新しい LD パスのライブラリは「標準ライブラリ」と競合しないことに注意してください。したがってls、私の例では邪魔になりません。

LD_LIBRARY_PATHしたがって、副作用についてのより深い説明や、私の例を深くデバッグする方法に興味があります。

4

2 に答える 2

3

この投稿は古いため、既に解決策が見つかっているかどうかはわかりません。とにかく、これが役立つかどうかはわかりませんが、最近のほとんどの GNU/Linux システムでは、LD_LIBRARY_PATH の使用は推奨されておらず、推奨されていません。

したがって、いくつかの提案があります。

  1. 引き続き使用したい場合は、ライブラリ パスを LD_LIBRARY_PATH に追加する代わりに、最初に保留してみてください。これは、以前のライブラリ ディレクトリのパスをスキャンするのに時間がかかるものがある場合に役立ちます。

  2. 現在、LD ディレクトリを使用する (新しい)適切な方法である LDCONFIG システムを使用します。ライブラリへのパスを/etc/ld.so.confファイルに追加するか、ライブラリへのパスを含むファイルを /etc/ld.so.conf.d/ に追加するだけです ( /etc/ld.so.confにインクルード ディレクティブがある場合にソース化されます (通常はデフォルトのケースです)。次に実行sudo ldconfigして、システム LD 検索パスを更新します。

これが助けになることを願っています。乾杯

于 2014-05-11T10:19:43.040 に答える
0

LD_LIBRARY_PATH追加しようとしているライブラリや実行中のプログラムに他に何があるかはわかりませんが、余分なライブラリが必要なプログラムのために LD_LIBRARY_PATH を変更するラッパースクリプトを作成して、システムがのような機能lsは影響を受けません。

#!/bin/bash
export LD_LIBRARY_PATH=/my_path/lib
program_name

ファイルを作成し、chmod +x wrapper_name

于 2012-06-07T19:58:25.327 に答える