问题描述
我试图让我的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来修复它们。