2012-05-30 69 views
25

我試圖讓我的CUDA軟件開發包樣品運行,但我得到了以下錯誤:在Ubuntu下編譯CUDA示例時爲什麼找不到libcudart.so.4?

./bandwidthTest: error while loading shared libraries: 
       libcudart.so.4: cannot open shared object file: 
       No such file or directory 

爲什麼我編譯成功的例​​子,但不運行它?有沒有辦法手動指定CUDA運行時庫的路徑?

+0

你是如何編譯代碼的? – Adam27X

+0

您是否記得更新您的.bashrc文件中的LD_LIBRARY_PATH和PATH環境變量,或者與您的shell相關的任何配置文件? – sj755

+0

聲音像lib可能已被重命名,在/ usr/lib文件夾中的名稱中是否有任何「libcudard」? – Lalaland

回答

12

首先,您需要連接到CUDA二進制文件和庫的路徑。這隻需將以下幾行添加到.bashrc文件即可完成。

export PATH=$PATH:/usr/local/cuda/bin 
export LD_LIBRARY_PATH=:/usr/local/cuda/lib64 

如果您使用的是32位操作系統的變化lib64下到LIB

其次,應該已經安裝在/ usr/lib目錄或/ usr/lib64的一些共享對象文件,這取決於你的操作系統。這些目標文件應該包含在一個名爲「nvidia」的目錄中。我們關心的兩個文件是libcuda.so.drivernumber和libOpenCL.so.somenumber。區分實際共享對象文件只需使用ls -l。符號鏈接將顯示它們實際鏈接到的內容。

以root身份,執行以下命令:

ln -s /usr/lib64/nvidia/libcuda.so.somenumber /usr/lib64/libcuda.so 
ln -s /usr/lib64/nvidia/libOpenCL.so.somenumber /usr/lib64/libOpenCL.so 

這應該讓你編譯SDK中的所有源。

作爲Cuda的5.5和Ubuntu 12.04/12.10的,上面的命令變爲(注意在Ubuntu和CUDA目錄的變化)爲64位

ln -s /usr/local/cuda/lib64/libcuda.so.5.5 /usr/lib/libcuda.so.5.5 

即,12.04 Ubuntu上的lib文件夾是LIB32和LIB; 64是隱含的,並且cuda 5.5和更高版本現在安裝到不同的目錄。

+0

ln:創建符號鏈接'/usr/lib/libcuda.so':文件存在 – Alex

+0

符號鏈接不適用於我。 ln -s /usr/lib/nvidia/libcuda.so.295.41 /usr/lib/libcuda.so ln -s /usr/lib/nvidia/libOpenCL.so.1.0.0 /usr/lib/libOpenCL.so – Alex

+0

@亞歷克斯你能弄清楚/usr/lib/libcuda.so是否是一個符號鏈接以及鏈接到的內容。如果它鏈接到正確的位置,那麼只要嘗試創建一個到OpenCL共享對象文件的符號鏈接(如果它不存在的話)。 – sj755

5

LD_LIBRARY_PATH強烈棄用。它可能會弄亂其他程序,而其他程序可能會重置它。它應該只用於暫時覆蓋永久路徑進行測試(不要拿我的話,谷歌它)。

相反,在你的cuda lib目錄上添加一行到/etc/ld.so.conf中,在任何現有的行之後。

例如,如果你的/ usr /本地/ CUDA安裝,您將需要添加

32位:在/ usr /本地/ CUDA/lib目錄

64位:在/ usr/local/cuda/lib64

保存並運行ldconfig。這應該永久解決問題。

符號鏈接可能已經由安裝設置。如果不是,請按照Alex的建議添加它們。

注 - 我收到引用/ lib的錯誤,但我需要添加lib64來修復它們。

79

嘗試:

32位:sudo ldconfig /usr/local/cuda/lib

64位:sudo ldconfig /usr/local/cuda/lib64

歡呼

+1

也適用於我,Ubuntu 12.04 :) – SlimJim

+0

哇謝謝。我正在使用Theano並得到:「無法編譯cuda_ndarry.cu:libcublas.so.6.0:無法打開共享目標文件:沒有這樣的文件或目錄」這個修正了它:D –

+1

是與'export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:在/ usr /本地/ CUDA/lib64'? – SolessChong

1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib 

,或者如果你是一個64位的機器上運行CUDA-5.0

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-5.0/lib64 
2

創建/etc/ld.so.conf.d/一個nvidia_settings.conf文件和路徑添加到庫文件中nvidia_settings.conf

/usr/local/cuda/lib64 
/usr/local/cuda/lib 

現在來更新改變運行以下命令:

sudo ldconfig 
6

1錯誤而載入共享庫:libcudart.so.6.0:無法打開共享對象文件:沒有這樣的文件或目錄

32-bit: sudo ldconfig /usr/local/cuda/lib 

    64-bit: sudo ldconfig /usr/local/cuda/lib64 

(參考:http://blog.csdn.net/shenchong721/article/details/21529295

適合我!

+1

我得到這個錯誤$ sudo ldconfig /usr/local/cuda-7.5/lib64 /sbin/ldconfig.real:/usr/local/cuda-7.5/lib64/libcudnn.so.4不是符號鏈接 –

0

系統使用ld工具查找庫。作爲最佳答案,64位:sudo ldconfig/usr/local/cuda-xx/lib64 ;; xx是cuda庫存編號

0

在我的情況下,我正在運行使用MPI的應用程序。錯誤是:

libcudart.so.7: cannot open shared object file 

CUDA已正確安裝在所有節點中。另外,如前面的回答一樣,變量$ PATH和$ LD_LIBRARY_PATH分別指向二進制文件和庫。

在MPI命令中傳遞$ PATH和$ LD_LIBRARY_PATH解決了這個問題。

mpirun -x PATH=$PATH -x LD_LIBRARY_PATH=$LD_LIBRARY_PATH ... 
相關問題