我刚从CUDA 4.2升级到CUDA 5.0。毫不奇怪,以前名为libcudart.so.4
的库现在称为libcudart.so.5.0
。在用nvcc 5.0重新编译我的代码并尝试运行代码之后,我收到了这条消息:
./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版本上:
user@host$ 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
答案 0 :(得分:1)
我想把这个问题从未答复的清单中删除,我不认为@Jared Hoberock会介意,所以我将发表他的评论作为答案。如果有问题,Jared或solvePuzzles发布了答案,我会删除我的(假设它不被接受 - 我不能删除已接受的答复AFAIK)。
nvcc
似乎是静态链接libcudart.a
版本4。
在你的lib路径的某个地方,似乎nvcc
找到了一个旧的libcudart.a
,需要将其删除。
对于其他读者,可能只需在系统上找到libcudart.*
的所有实例并删除任何与您所需的CUDA版本不匹配的实例(假设您没有尝试运行具有多个CUDA的计算机)版本可用 - 在这种情况下,编译和运行的库路径必须进行适当的管理)