2013-01-15 51 views
2

我刚刚从CUDA 4.2升级到CUDA 5.0。毫不奇怪,曾经被命名为libcudart.so.4的库现在被称为libcudart.so.5.0。重新编译代码才能使用NVCC 5.0,并试图运行代码后,我得到这个消息:CUDA 5.0希望来自CUDA 4.0的libcudart?

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

呀,你这个愚蠢的系统,我知道有没有libcudart.so.4。这是因为它现在被称为libcudart.so.5.0为什么它寻找libcudart.so.4而不是libcudart.so.5.0,我该如何解决?


我试过到目前为止:

我检查了我所有的路径都井然有序。这些环境变量设置:

export PATH=$PATH:/usr/local/cuda/bin:/usr/lib 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib:/usr/local/cuda/lib64:/lib 
#note: /usr/local/cuda is symlinked to /usr/local/cuda-5.0 

我验证过libcudart.so.5.0可以在LD_LIBRARY_PATH目录中找到。

我用CUDA 5.0版本nvcc重新编译了我的CUDA应用程序。我成功编译并在另一台装有CUDA 4.2的机器上运行我的应用程序,并在另一台装有CUDA 4.0的机器上运行我的应用程序。

我证实,nvcc真的是在5.0版本:

[email protected]$ nvcc --version 
nvcc: NVIDIA (R) Cuda compiler driver 
Copyright (c) 2005-2012 NVIDIA Corporation 
Built on Fri_Sep_21_17:28:58_PDT_2012 
Cuda compilation tools, release 5.0, V0.2.122 
+1

也许这很明显,但'nvcc'似乎是静态链接到'libcudart.a'版本4.也许这就是隐藏在你的lib路径的某处? –

+1

是的,这就是发生了什么!我只是擦了旧的显示驱动程序,并重新安装它,现在看起来好了。随意发表您的评论作为答案,我会接受它。 :) – solvingPuzzles

回答

1

我想获得这个问题关闭解答列表,我不认为@Jared Hoberock会介意,所以我将发表他的评论作为答案。如果出现问题,Jared或正在填写答案,我会将其删除(假设它未被接受 - 我无法删除已接受的答复AFAIK)。

nvcc似乎是在你的库路径对libcudart.a版本4

某处静态链接,似乎nvcc是找到一个旧libcudart.a,它需要被删除。

对于其他读者,在系统上找到libcudart.*的所有实例并删除与您所需的CUDA版本不匹配的任何实例可能就足够了(假设您没有试图运行具有多个CUDA版本的机器 - - 在这种情况下,编译和运行的库路径必须适当管理)

+0

是的,这是问题所在。我在CUDA安装目录中安装了'cuda 4.2'版本的'libcudart.a.version - > libcudart.a'。清理了我的旧符号链接,一切都很顺利。删除旧的显示驱动程序版本也有助于解决类似的CUDA 4 vs 5问题。 – solvingPuzzles

+0

我在'locate libcudart'给出'/usr/local/MATLAB/R2012a/bin/glnx86/libcudart.so.4 /usr/local/MATLAB/R2012a/bin/glnx86/libcudart.so时遇到同样的问题。 4.0.17 /usr/local/cuda-5.5/lib/libcudart.so /usr/local/cuda-5.5/lib/libcudart.so.5.5 /usr/local/cuda-5.5/lib/libcudart.so .5.5.22 /usr/local/cuda-5.5/lib/libcudart_static。一个'我该如何解决这个与matlab的冲突? – Rasoul