web-dev-qa-db-ja.com

LD_LIBRARY_PATHは、sudoの後は常に空白

ソフトウェアを手動でインストールしているように見えるたびに、共有ライブラリエラーが発生します。 echo $LD_LIBRARY_PATHを実行すると、.. nothingと表示されます。 /usr/local/lib.conf/etc/ld.so.conf.dファイルに追加しようとしましたが、実行されないようです。

これも機能しません(引用符など):

LD_LIBRARY_PATH="/usr/local/lib"
export LD_LIBRARY_PATH
Sudo ldconfig -v

値は一時的に設定されますが、ターミナルウィンドウを終了した場合、値は保持されません。再起動しても何も起こりません。

9
Dissident Rage

以下を.bashrcに追加します。

vim ~/.bashrc

...
export LD_LIBRARY_PATH=/usr/local/lib

これにより、コンピュータを再起動しても、そのパスが割り当てられたままになります。

7
Kevdog777

Red Hat Enterprise Linux(RHEL)6では、/etc/ld.so.confにはinclude ld.so.conf.d/*.confが含まれます。この行がないと、/etc/ld.so.conf.d/*.confのアイテムは解析されません。

ldconfigが解析しているライブラリ/ディレクトリを確認するには

ldconfig -v 

現在のバージョン番号、スキャンされる各ディレクトリの名前、作成されたリンクを出力します。

1
pyther

私は最終的にこれをエイリアスで解決しました:

alias Sudo='Sudo PATH="$PATH" HOME="$HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH"'

変数がエイリアスの定義時ではなく、呼び出し時に展開されるように、必ず単一引用符を使用してください。

この:

  • hOMEを保持します(そうでなければ/ rootに設定されます)
  • pATHを保持します(それ以外の場合はsudersで「安全な」パスに設定されます)
  • lD_LIBRARY_PATHのcurrent値を保持します(それ以外の場合は空白になります)

(何が設定されているかを確認できます:Sudo bash -c "echo $HOME"

私はカスタムドライバーを使用しており、ドライバーにアクセスするにはテストプログラムを常にsudoする必要があります。システム領域にライブラリのテストバージョンをインストールしたくないので、必要に応じてLD_LIBRARY_PATHを使用して特定のテストディレクトリをセットアップします。固定のLD_LIBRARY_PATHを設定することはできません。変更して現在の設定を維持できるようにする必要があります。 PATHとHOMEを保持することで、スクリプトとディレクトリ構造という私の作業環境にアクセスできます。

このエイリアスにより、sudoersに包括的な権限を付与する必要がなくなります。どうせsudoersの設定に関係なく、LD_LIBRARY_PATHの回避策は明らかにありません。スクリプト内ではSudoは機能しませんが、必要に応じてハードコーディングできます。

0
maharvey67