web-dev-qa-db-ja.com

lddがパスを見つけられない、追加方法

この質問はそれほど新しいものではありませんが、自分で問題を解決できなかったようです。

ldd次の出力を生成します

u123@PC-Ubuntu:~$ ldd /home/u123/Programme/TestPr/Debug/TestPr
    linux-vdso.so.1 =>  (0x00007ffcb6d99000)
    libcsfml-window.so.2.2 => not found
    libcsfml-graphics.so.2.2 => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcebb2ed000)
    /lib64/ld-linux-x86-64.so.2 (0x0000560c48984000)

ldに正しいパスを伝える正しい方法はどれですか?

11
C-Jay

ライブラリが標準パス上にない場合は、ライブラリをパスに追加するか、非標準パスをLD_LIBRARY_PATHに追加する必要があります

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<Your_non-Standard_path>

上記のいずれかを実行したら、以下のコマンドを実行して、動的リンカーのランタイムバインディングを更新する必要があります。

Sudo ldconfig

更新:

上記のexport行を起動ファイル(〜/ .bashrcなど)のいずれかに書き込むことで、変更を永続的にすることができます[〜#〜] or [〜#〜] if if基礎となるライブラリは他のライブラリと競合していないので、標準のライブラリパス(たとえば、/ lib、/ usr/lib)の1つに配置されます。

12
SHW

LD_LIBRARY_PATHは短いテストに適していますが、variableが1つしかないため、カスタムライブラリを持つ複数のアプリケーションがある場合に使用するのは面倒です。

Debian/Ubuntuの通常の方法は、それをローダーの構成に追加することです。

/etc/ld.so.conf.d

ローダーに検索させたいディレクトリを含みます。例えば、

/usr/local/libcsfml

参考文献:

12
Thomas Dickey

これは、問題のバイナリがコンパイルされたかのように見えます。

そのため、一部のライブラリが見つからないという問題の責任はあなたにあります。

これらのライブラリがシステムで使用できる場合、それらは標準以外のディレクトリの場所にあるようです。

最後のコンパイラー呼び出しに-R directoryを使用して、ライブラリーが置かれているdirectoryをリンカーに通知します。複数の-R directoryオプションを使用できます。

gccを使用している場合は、-Wl,-Rではなく-Rを使用する必要があることに注意してください。

3
schily