【问题标题】:CUDA 7.0 Error while compiling samples编译样本时出现 CUDA 7.0 错误
【发布时间】:2017-08-30 15:38:12
【问题描述】:

我正在尝试在 Ubuntu 14.04 上安装 CUDA 7.0。我已按照here 概述的安装说明进行操作。具体来说,我已按照第 3.6 节和第 6 章中的步骤进行操作。在使用 make 编译示例(第 6.2.2.2 节)时,我收到以下错误:

make[1]: Entering directory `/usr/local/cuda-7.0/samples/3_Imaging/cudaDecodeGL'
/usr/local/cuda-7.0/bin/nvcc -ccbin g++   -m64      -gencode arch=compute_20,
code=compute_20 -o cudaDecodeGL FrameQueue.o ImageGL.o VideoDecoder.o
VideoParser.o VideoSource.o cudaModuleMgr.o cudaProcessFrame.o 
videoDecodeGL.o  -L../../common/lib/linux/x86_64 -L/usr/lib/"nvidia-346"
-lGL -lGLU -lX11 -lXi -lXmu -lglut -lGLEW -lcuda -lcudart -lnvcuvid
/usr/bin/ld: cannot find -lnvcuvid
collect2: error: ld returned 1 exit status
make[1]: *** [cudaDecodeGL] Error 1
make[1]: Leaving directory `/usr/local/cuda-7.0/samples/3_Imaging/cudaDecodeGL'
make: *** [3_Imaging/cudaDecodeGL/Makefile.ph_build] Error 2

【问题讨论】:

  • 在 6.3.1 节中提到了需要额外的库来构建一些示例的事实。对于 ubuntu,尝试:sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev 并且您可能会遇到需要其他组件的其他示例(例如 simpleMPI)。如果您不关心这些特定示例,您可以通过make -k 继续示例构建过程,有效地跳过那些不会构建的示例。
  • 抱歉,以上内容与您的问题无关。 libnvcuvid.so 应该已经由驱动程序安装在 /usr/lib 的某个位置,您使用的包管理器安装似乎没有将它放在这个 Makefile 期望在 /usr/lib/"nvidia-346" 中找到它的位置这并不容易修复。如果你不关心这个样本,你仍然可以使用make -k。否则,我建议从干净的 ubuntu 负载重新开始,并使用运行文件安装程序方法。您可能没有在包管理器安装方法中使用正确的 ubuntu 14.04 存储库。
  • 感谢@RobertCrovella 的回复。我在/usr/lib/nvdia-331 中找到了 libnvcuvid.so。现在需要做什么?如果我必须通过运行文件安装程序方法安装,那么如何卸载通过包管理器安装方法安装的所有 Cuda 组件?另外,我需要卸载它们吗?
  • 一般来说runfile方法和包管理器方法是不兼容的。 CUDA 7 应该尝试使用 346.xx 驱动程序,因此 nvidia-331 不正确,它是 ubuntu 附带的东西或以前通过包管理器方法完成的东西留下的。如果您想使用 CUDA 7 运行文件安装,我将首先删除所有旧的包管理器组件。
  • 类似这样的: 1.sudo service lightdm stop 2.sudo apt-get --purge remove nvidia-* 3.sudo apt-get purge xserver-xorg-video-nouveau 4.sudo echo -e "blacklist nouveau\noptions nouveau modeset=0" > /etc/modprobe.d/disable-nouveau.conf 5.sudo update-initramfs –u 然后运行或重新运行 CUDA 7 linux 运行文件安装程序。

标签: cuda ubuntu-14.04


【解决方案1】:

如果你注意到,有 -L/usr/lib/"nvidia-346"。就我而言,我已经安装了 nvidia-349。对我有用的是编辑 NVIDIA_CUDA-7.0_Samples/3_Imaging/cudaDecodeGL/findgllib.mk 并将 UBUNTU_PKG_NAME = "nvidia-346" 更改为 nvidia-349。

【讨论】:

  • 但这在 OP 的情况下不起作用,其中找到的包是 nvidia-331。这与 CUDA 7 不兼容。
  • 我想说的是,在这个CUDA示例中,版本号是硬编码在.mk文件中的,需要根据当前的安装进行更改。
  • 但即使它被更改为匹配 OP 的当前安装,(即nvidia-331)它也不起作用。 nvidia-331 与 CUDA 7 不兼容。因此您的答案不能用于解决 OP 的问题。所以安装必须修复。通过正确/固定的安装,您不必四处修改硬编码的 .mk 文件。
  • 我认为这不是一个真正的答案,充其量可能是一个评论。我知道在你有一定的代表之前你不能制作 cmets,但这是 SO 野兽的本性。
  • 即使正确安装了具有 349 个 nvidia 驱动程序的 cuda,由于硬编码的版本值,错误仍然存​​在。我相信这是因为 cuda 的安装文件要求安装 nvidia 346。如果按不安装驱动程序,就会出现问题。由于最初的问题没有提到 nvidia 驱动程序版本,这可能对其他人有所帮助。
【解决方案2】:

为了在 Ubuntu 14.04 上正确安装 CUDA 7.0,您需要 nvidia 驱动程序版本 346 或更高版本。

如果您使用 .deb 安装方法,则会自动安装 nvidia 显卡驱动程序。

如果你使用.run文件安装方式,选择不安装nvidia驱动,之后可以通过包管理器手动安装驱动:

    sudo apt-add-repository ppa:xorg-edgers/ppa && sudo apt-get update

    sudo apt-get install nvidia-346 nvidia-346-dev nvidia-346-uvm libcuda1-346 nvidia-libopencl1-346 nvidia-icd-346

在我的情况下,由于 nvidia-346 中的错误,我后来安装了 nvidia-352,我偶然发现了同样的错误。

andoum 在 NVIDIA_CUDA-7.0_Samples/3_Imaging/cudaDecodeGL/findgllib.mk 中手动将硬编码的 UBUNTU_PKG_NAME = "nvidia-346" 更改为 UBUNTU_PKG_NAME = "nvidia-352" 的方法对我来说效果很好。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,解决方法是将nvidia的路径放入系统路径:

    sudo gedit /etc/environment
    

    将这些路径添加到环境中

    LIBRARY_PATH=/usr/lib/your_nvidia_edition:$LIBRARY_PATH

    【讨论】:

      【解决方案4】:

      其实我做make的时候也遇到过这个问题。我在我的 Ubuntu 16.04 下安装了 Cuda 8.0。这个问题让我困惑了几个星期,在通过谷歌查看了许多建议之后,我几乎倾向于重新安装 ubuntu,但最后我最近自己解决了这个问题。

      首先,您应该按照上面的建议将所有 UBUNTU_PKG_NAME= ##nvidia-3xx## 替换为您实际安装的 nvidia 驱动程序版本。然后你可能会在你做一个新的 make 后得到编译错误。就我而言,我有链接错误,如

      /usr/bin/ld: warning: libGLX.so.0, needed by /usr/lib/nvidia-
      375/libGL.so, not found (try using -rpath or -rpath-link)
      /usr/bin/ld: warning: libGLdispatch.so.0, needed by /usr/lib/nvidia-
      375/libGL.so, not found (try using -rpath or -rpath-link)
      ....
      

      或任何包含缺失链接错误的内容。一定要找到你错过的文件,比如

      $ locate libGLX.so.
        /usr/lib/nvidia-375/libGLX.so.0
        /usr/lib32/nvidia-375/libGLX.so.0
      $ locate libGLdispatch.so.0
        /usr/lib/nvidia-375/libGLdispatch.so.0
        /usr/lib32/nvidia-375/libGLdispatch.so.0
      

      上面的错误可能是因为你设置的默认cuda库中找不到编译文件,所以你只需要将丢失的文件复制到/usr/lib/nvidia-3xx/(你的情况下的实际路径),这应该工作(它在我的情况下工作),如果不是,也许你可以尝试使用

      将新的添加文件链接到需要的文件
      $ sudo ln -s (requested file) (requesting file).
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-05-02
        • 2021-11-01
        • 2013-08-16
        • 2023-03-27
        • 2013-10-05
        • 2022-07-13
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多