この質問はそれほど新しいものではありませんが、自分で問題を解決できなかったようです。
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
に正しいパスを伝える正しい方法はどれですか?
ライブラリが標準パス上にない場合は、ライブラリをパスに追加するか、非標準パスを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つに配置されます。
LD_LIBRARY_PATH
は短いテストに適していますが、variableが1つしかないため、カスタムライブラリを持つ複数のアプリケーションがある場合に使用するのは面倒です。
Debian/Ubuntuの通常の方法は、それをローダーの構成に追加することです。
/etc/ld.so.conf.d
ローダーに検索させたいディレクトリを含みます。例えば、
/usr/local/libcsfml
参考文献:
これは、問題のバイナリがコンパイルされたかのように見えます。
そのため、一部のライブラリが見つからないという問題の責任はあなたにあります。
これらのライブラリがシステムで使用できる場合、それらは標準以外のディレクトリの場所にあるようです。
最後のコンパイラー呼び出しに-R directory
を使用して、ライブラリーが置かれているdirectory
をリンカーに通知します。複数の-R directory
オプションを使用できます。
gcc
を使用している場合は、-Wl,-R
ではなく-R
を使用する必要があることに注意してください。