我正在尝试运行我的 Cuda SDK 示例,但出现以下错误:
./bandwidthTest: error while loading shared libraries:
libcudart.so.4: cannot open shared object file:
No such file or directory
为什么我可以成功编译示例,但不能运行?有没有办法手动指定 CUDA 运行时库的路径?
尝试:
32 位:sudo ldconfig /usr/local/cuda/lib
64 位:sudo ldconfig /usr/local/cuda/lib64
干杯
首先,您需要的是将路径连接到 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 开始,对于 64 位,上面的命令变为(注意 Ubuntu 和 Cuda 目录更改)
ln -s /usr/local/cuda/lib64/libcuda.so.5.5 /usr/lib/libcuda.so.5.5
也就是说,Ubuntu 12.04 上的 lib 文件夹是 lib32 和 lib;64 是隐式的,cuda 5.5 和更高版本现在安装到不同的目录。
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/shechong721/article/details/21529295)
为我工作!
LD_LIBRARY_PATH 已被强烈弃用。它可能会弄乱其他程序,其他程序可能会重置它。它只能用于临时覆盖永久路径以进行测试(不要相信我的话,谷歌它)。
相反,在 /etc/ld.so.conf 中添加一行,其中包含您的 cuda lib 目录,在任何现有行之后。
例如,如果您安装在 /usr/local/cuda 上,则需要添加
32 位:/usr/local/cuda/lib
64 位:/usr/local/cuda/lib64
保存并运行 ldconfig。这应该可以永久解决问题。
符号链接可能已经由安装设置。如果没有,请按照 Alex 的建议添加它们。
注意 - 我收到了引用 /lib 的错误,但我需要添加 lib64 来修复它们。
在 /etc/ld.so.conf.d/ 中创建一个 nvidia_settings.conf 文件,并将路径添加到文件 nvidia_settings.conf 中的库
/usr/local/cuda/lib64
/usr/local/cuda/lib
现在要更新更改,请运行以下命令:
sudo ldconfig
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
系统使用 ld 工具查找库。正如最佳答案所说,64 位: sudo ldconfig /usr/local/cuda-xx/lib64 ;;xx 是 cuda libraryedition
就我而言,我正在使用 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 ...