我按照 nvidia 官方指南安装了 cuda-7.0,但是遇到了一些问题,他们没有提供完整的解释。而且我的测试示例无法通过 构建make
。我将解释我在安装过程中发现的几个错误。
环境
我正在使用 64 位 Ubuntu 14.04,NVIDIA Corporation GK107 [GeForce GT 640 OEM]
返回的是lspci | grep -i nvidia
。我的 gcc 版本是 4.4.7。
包裹
我从https://developer.nvidia.com/cuda-downloads“Linux x86 -> Ubuntu 14.04 -> 本地软件包安装程序”,它没有提供 md5 值来检查。但后来安装似乎没问题。
安装
我做到了:
sudo dpkg -i cuda*.deb # returned: OK
sudo apt-get update
sudo apt-get install cuda
测试
根据官方指南,我必须先设置环境路径。我将其更改为:
cd /usr/local/cuda-7.0
我可以添加路径:
export PATH=/usr/local/cuda-7.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
这是第一个问题:每当我关闭终端时,路径就会丢失。因为我可以通过nvcc -V
第一个目录下的 nvcc 来检查它。
当我尝试编译样本时:
cd /usr/local/cuda-7.0/samples
sudo make
最后它返回错误:
make[1]: entering directory `/usr/local/cuda-7.0/samples/2_Graphics/Mandelbrot'
/usr/local/cuda-7.0/bin/nvcc -ccbin g++ -m64 -gencode
arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode
arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode
arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode
arch=compute_52,code=compute_52 -o Mandelbrot Mandelbrot.o Mandelbrot_cuda.o Mandelbrot_gold.o -L../../common/lib/linux/x86_64 -L/usr/lib/"nvidia-346" -lGL -lGLU -lX11 -lXi -lXmu -lglut -lGLEW
/usr/bin/ld: warning: libnvidia-tls.so.346.46, needed by /usr/lib/nvidia-346/libGL.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvidia-glcore.so.346.46, needed by /usr/lib/nvidia-346/libGL.so, not found (try using -rpath or -rpath-link)
/usr/lib/nvidia-346/libGL.so:‘_nv018tls’ undefined reference
...
# list of undefined reference
我无法再继续前行。
其他检查
cat /proc/driver/nvidia/version
不起作用,因为/proc/driver
没有目录nvidia/
。/dev/nvidia*
不存在。nvidia-smi
找不到命令。
重启后这些问题仍然存在。
一些修复
~/.profile
通过为当前用户添加这两行来修复路径和库设置:
export PATH=/usr/local/cuda-7.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-7.0/lib64:$LD_LIBRARY_PATH
并找到了一个有用的链接:在 Ubuntu 14.04 中安装和测试 CUDA看来我需要通过运行文件来安装。
答案1
经过多次尝试,我终于找到了解决方案。安装 CUDA 很麻烦,因为它不断破坏我的系统配置,而且我无法恢复。
安装解决方案必须在 tty1 中完成(命令行)模式,因为它需要在安装 NVIDIA 驱动程序之前终止 GUI 服务,否则它将拒绝工作。我们需要.run
文件。由于我不知道的原因,.deb 文件从未正确配置自己,我从未让它们工作过。看看在 Ubuntu 14.04 中安装和测试 CUDA寻求类似的解决方案。
需要提一下,根据我的足迹:
- 通过 apt 安装无法成功。
- 通过 deb 文件安装无法成功。
答案2
我也遇到了同样的问题。运行以下命令帮助我测试并了解问题:
ldd /usr/lib/nvidia-346/libGL.so.346.46
最后,添加以下内容~/.profile
解决了问题:
export LD_LIBRARY_PATH=/usr/lib/nvidia-346:$LD_LIBRARY_PATH
因为实际上并/usr/lib/nvidia-346
没有向链接器提供路径。
答案3
我在 Ubuntu 14.04、x86_64 和 cuda 7.5 上也遇到了同样的问题。警告如下:
/usr/bin/ld: warning: libnvidia-tls.so.352.63, needed by /usr/lib/nvidia-352/libGL.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libnvidia-glcore.so.352.63, needed by /usr/lib/nvidia-352/libGL.so, not found (try using -rpath or -rpath-link)
这是输出ldd /usr/lib/nvidia-352/libGL.so
:
$ ldd /usr/lib/nvidia-352/libGL.so
linux-vdso.so.1 => (0x00007ffc1c5d4000)
libnvidia-tls.so.352.63 =>
libnvidia-glcore.so.352.63 =>
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f161512e000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f1614f1c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1614b57000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1614952000)
libm.so.6 => /lib/x86_64-linux-(0x00007f1615488000)gnu/libm.so.6 (0x00007f161464c000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f161442d000)
/lib64/ld-linux-x86-64.so.2 (0x0000557aa9c51000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f1614228000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f1614022000)
我添加了以下行到~/.zshrc
(~/.bashrc
...如果您使用 bash):
export LD_LIBRARY_PATH=/usr/lib/nvidia-352:$LD_LIBRARY_PATH
因此,以下是我的与 cuda 相关的条目~/.zshrc
:
export PATH=$PATH:/usr/local/cuda-7.5/bin
export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/nvidia-352:$LD_LIBRARY_PATH
然后我找到了~/.zshrc
source ~/.zshrc
現在ldd /usr/lib/nvidia-352/libGL.so
顯示:
linux-vdso.so.1 => (0x00007ffc1c5d4000)
libnvidia-tls.so.352.63 => tls/libnvidia-tls.so.352.63 (0x00007f1617f1c000)
libnvidia-glcore.so.352.63 (0x00007f1615488000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f161512e000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f1614f1c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1614b57000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1614952000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f161464c000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f161442d000)
/lib64/ld-linux-x86-64.so.2 (0x0000557aa9c51000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f1614228000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f1614022000)
此后make
内部NVIDIA_CUDA-7.5_Samples
目录成功完成。
答案4
我遇到了同样的问题。我在 Ubuntu 14.04 上使用 nvidia 网站上的 .deb 包进行安装。我的解决方案是:
- 添加
export LD_LIBRARY_PATH=/usr/lib/nvidia-346:$LD_LIBRARY_PATH
到 ~/.bashrc - 打开终端类型:
- cd 到示例文件夹
sudo bash
source ~./bashrc
- 检查 /usr/lib/nvidia-346 是否在 LD_LIBRARY_PATH 中
make -j
这帮我解决了这个问题。
我感觉使用 cuda-repo-ubuntuXXX_amd64.deb 文件安装 CUDA 时存在一些权限问题。我有