26

我正在尝试运行我的 Cuda SDK 示例,但出现以下错误:

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

为什么我可以成功编译示例,但不能运行?有没有办法手动指定 CUDA 运行时库的路径?

4

8 回答 8

79

尝试:

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

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

干杯

于 2012-10-02T21:21:39.370 回答
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 开始,对于 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 和更高版本现在安装到不同的目录。

于 2012-05-30T03:24:18.593 回答
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/shechong721/article/details/21529295

为我工作!

于 2014-07-09T17:16:35.550 回答
5

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 来修复它们。

于 2012-06-09T00:54:03.377 回答
2

在 /etc/ld.so.conf.d/ 中创建一个 nvidia_settings.conf 文件,并将路径添加到文件 nvidia_settings.conf 中的库

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

现在要更新更改,请运行以下命令:

sudo ldconfig
于 2013-07-30T03:53:18.833 回答
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
于 2013-07-25T12:24:25.037 回答
0

系统使用 ld 工具查找库。正如最佳答案所说,64 位: sudo ldconfig /usr/local/cuda-xx/lib64 ;;xx 是 cuda libraryedition

于 2014-10-05T13:24:08.447 回答
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 ...
于 2016-03-07T20:39:49.583 回答