私はこの問題がそれほど新しいものではないことを知っていますが、私の問題を自分で解決することはできないようです。
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
正しいパスを知らせる正しい方法は何ですか?
答え1
ライブラリが標準パスにない場合は、パスに追加するか、LD_LIBRARY_PATHに非標準パスを追加する必要があります。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<Your_non-Standard_path>
上記のいずれかの操作を完了したら、次のコマンドを実行して動的リンカーランタイムバインディングを更新する必要があります。
sudo ldconfig
修正する:
スタートアップファイルの1つ(〜/ .bashrcなど)に上記の行を作成して、export
変更を永続的に適用できます。またはデフォルトライブラリが他のライブラリと競合しない場合は、標準ライブラリパス(例:/lib、/usr/lib)のいずれかを入力してください。
答え2
LD_LIBRARY_PATH
短期テストにはいいけど一つしかないから変える、カスタムライブラリを持つ複数のアプリケーションがある場合、使用するのは厄介です。
Debian/Ubuntu の一般的なアプローチは、ローダの設定にそれを追加することです。
/etc/ld.so.conf.d
ローダーが検索するディレクトリが含まれています。たとえば、次のようになります。
/usr/local/libcsfml
追加資料:
答え3
問題のバイナリはあなたがコンパイルしたようです。
したがって、いくつかのライブラリが見つからない問題はあなたの責任です。
システムでこれらのライブラリが利用可能な場合は、非標準ディレクトリの場所にあるように見えます。
ライブラリが存在する場所を-R directory
リンカに通知するために、最終コンパイラ呼び出しに使用されます。directory
複数の-R directory
オプションが可能です。
を使用する場合は、代わりにgcc
使用する必要があります。-Wl,-R
-R