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 安裝的一部分提供的,所以我想假設它是
  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

確認輸出第二行缺少 libcudart.so.4。

答案1

  1. LD_LIBRARY_PATH您是否從執行該程式的 shell 中導出了?

  2. 程式和共用程式庫都是 64 位元二進位檔案(還是都是 32 位元二進位檔案)?

  3. 的輸出是什麼ldd programprogram運行時找不到庫的程式在哪裡?

答案2

如果您從原始程式碼構建,則可以選擇透過 --prefix= 或 --libdir= 來建置它,以便它使用現有的庫路徑。否則你可以:

  • 將 /usr/local/cuda/lib64 加入 /etc/profile 中的 LD_LIBRARY_PATH
  • 手動移動它(例如到 /usr/local/ )並為 /usr/local/cuda 建立符號連結到 /usr/local
  • 使用 LDPRELOAD 手動預先載入缺少的程式庫

關於 LD_LIBRARY_PATH 的快速提醒 - 請記住,新增的路徑越多,動態連結器就越需要尋找它。

相關內容