LD_LIBRARY_PATH に設定されたディレクトリにライブラリが見つかりません

LD_LIBRARY_PATH に設定されたディレクトリにライブラリが見つかりません

CUDA のインストールを確認しようとしていますが、いくつか問題が発生しています。GPU コンピューティング SDK に付属するすべての例を正常にビルドしました。ただし、deviceQuery を実行しようとすると、libcudart.so.4 が見つからないというエラーが表示されます。

しかし:

echo $LD_LIBRARY_PATH

戻り値

/usr/local/cuda/lib64

そのディレクトリ内には次のファイルがあります:

libcudart.so.4

ライブラリが見つからない原因として、他にどのようなエラーが考えられますか?

フランの回答の編集:

  1. はい、変数をエクスポートしています
  2. このプログラムが64ビットかどうかはわかりませんが、64ビットSDKインストールの一部として提供されたので、64ビットであると仮定したいと思います。
  3. lddの出力:

    #ldd deviceQuery
    linux-vdso.so.1 =>  (0x00007fff94ecc000)
    libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f2d4658a000)
    libcuda.so.1 => /usr/lib64/libcuda.so.1 (0x00007f2d45b1e000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000037f1200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000037e5e00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000037f0600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000037e5600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037e5a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000037e5200000)
    librt.so.1 => /lib64/librt.so.1 (0x00000037e6200000)
    libz.so.1 => /lib64/libz.so.1 (0x00000037e6e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000037e4e00000)
    

通常のユーザーとして実行できることが分かりましたが、その場合、ユーザーには GPU へのアクセス権がないため、失敗します。sudo で実行すると、ファイルが見つからないというエラーが発生します。

ランニング:

sudo ldd deviceQuery

出力の 2 行目に libcudart.so.4 が欠落していることを確認します。

答え1

  1. LD_LIBRARY_PATHプログラムを実行しているシェルからエクスポートしましたか?

  2. プログラムと共有ライブラリは両方とも 64 ビット バイナリですか (または両方とも 32 ビット バイナリですか)?

  3. の出力は何ですかldd programprogram実行時にライブラリを見つけることができないプログラムはどこにありますか?

答え2

ソースからビルドする場合は、--prefix= または --libdir= を介して既存のライブラリ パスを使用するようにビルドするオプションがあります。それ以外の場合は、次の操作を実行できます。

  • /etc/profile の LD_LIBRARY_PATH に /usr/local/cuda/lib64 を追加します。
  • 手動で移動し(たとえば/usr/local/)、/usr/local/cudaから/usr/localへのシンボリックリンクを作成します。
  • LDPRELOAD を使用して不足しているライブラリを手動でプリロードします。

LD_LIBRARY_PATH について簡単に説明します。追加するパスが増えるほど、動的リンカーがパスを見つけるために調べる必要のあるパスが増えることに注意してください。

関連情報