当前位置: 首页>>技术教程>>正文


在Ubuntu下编译CUDA示例时,为什么找不到libcudart.so.4?

, , , ,

问题描述

我试图让我的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开始,上面的命令成为(注意Ubuntu和Cuda目录已更改)64位

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

也就是说,从Ubuntu 12.04开始,lib上的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/shenchong721/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来修复它们。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9518.html,未经允许,请勿转载。