我正在嘗試驗證 CUDA 的安裝,但遇到了一些問題。我已經成功建立了 GPU 計算 SDK 附帶的所有範例。然而,當我嘗試執行 deviceQuery 時,出現錯誤,指出找不到 libcudart.so.4。
然而:
echo $LD_LIBRARY_PATH
回報
/usr/local/cuda/lib64
該目錄內部有一個檔案:
libcudart.so.4
還有哪些其他類型的錯誤可能導致無法找到該庫?
編輯弗蘭的答案:
- 是的,我正在導出變數
- 我不確定該程式是否是 64 位,但它是作為 64 位元 SDK 安裝的一部分提供的,所以我想假設它是
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
LD_LIBRARY_PATH
您是否從執行該程式的 shell 中導出了?程式和共用程式庫都是 64 位元二進位檔案(還是都是 32 位元二進位檔案)?
的輸出是什麼
ldd program
,program
運行時找不到庫的程式在哪裡?
答案2
如果您從原始程式碼構建,則可以選擇透過 --prefix= 或 --libdir= 來建置它,以便它使用現有的庫路徑。否則你可以:
- 將 /usr/local/cuda/lib64 加入 /etc/profile 中的 LD_LIBRARY_PATH
- 手動移動它(例如到 /usr/local/ )並為 /usr/local/cuda 建立符號連結到 /usr/local
- 使用 LDPRELOAD 手動預先載入缺少的程式庫
關於 LD_LIBRARY_PATH 的快速提醒 - 請記住,新增的路徑越多,動態連結器就越需要尋找它。