为什么在Ubuntu下编译CUDA样本时找不到libcudart.so.4?

Ale*_*lex 26 c++ unix ubuntu cuda gpu-programming

我正在尝试运行我的Cuda SDK示例,但是我收到以下错误:

./bandwidthTest: error while loading shared libraries:
                 libcudart.so.4: cannot open shared object file:
                 No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

小智 79

尝试:

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

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

干杯


sj7*_*755 12

首先,您需要将这些路径连接到CUDA二进制文件和库.这可以通过在.bashrc文件中添加以下行来完成.

export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=:/usr/local/cuda/lib64
Run Code Online (Sandbox Code Playgroud)

如果您使用的是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
Run Code Online (Sandbox Code Playgroud)

这应该允许您编译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
Run Code Online (Sandbox Code Playgroud)

也就是说,截至12.04的Ubuntu上的lib文件夹是lib32和lib; 64是隐式的,cuda 5.5和更高版本现在安装到不同的目录.


小智 6

加载共享库时出错1:libcudart.so.6.0:无法打开共享对象文件:没有这样的文件或目录

  32-bit: sudo ldconfig /usr/local/cuda/lib

  64-bit: sudo ldconfig /usr/local/cuda/lib64
Run Code Online (Sandbox Code Playgroud)

(参见:http://blog.csdn.net/shenchong721/article/details/21529295)

适合我!


小智 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来修复它们.