【问题标题】:CUDA missing libGL.so libGLU.so and libX11.soCUDA 缺少 libGL.so libGLU.so 和 libX11.so
【发布时间】:2016-04-09 14:31:51
【问题描述】:

这是人们遇到的标准问题,但我无法解决。我在 Linux Mint 17.3 上并通过 repo 进行了安装。当我尝试编译 5_Simulations 目录(真的,fluidsGL)时,我收到以下错误:

>>> WARNING - libGL.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - libGLU.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<
>>> WARNING - libX11.so not found, refer to CUDA Getting Started Guide for how to find and install them. <<<

但是,这些确实存在于系统中,例如:

[name@host: fluidsGL]$ locate libGL.so
/usr/lib/i386-linux-gnu/mesa/libGL.so.1
/usr/lib/i386-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib/nvidia-352/libGL.so
/usr/lib/nvidia-352/libGL.so.1
/usr/lib/nvidia-352/libGL.so.352.68
/usr/lib/x86_64-linux-gnu/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0
/usr/lib32/nvidia-352/libGL.so
/usr/lib32/nvidia-352/libGL.so.1
/usr/lib32/nvidia-352/libGL.so.352.6

即使使用 nvidia-352 版本符号链接到 /usr/lib/libGL.so 也不起作用。有人遇到过这个特殊问题吗?我尽量不要把电脑搞砸,因为当我开始搞乱这种东西时,驱动程序突然无法工作。

【问题讨论】:

  • 仅供参考 Linux Mint 不是officially supported distro for CUDA。建立该符号链接后,请尝试使用 GLPATH=/usr/lib make 而不是您为构建示例而发出的 make
  • GLPATH 完美运行!谢谢!
  • @NuclearAlchemist:如果这是您问题的解决方案,您能否在简短的回答中添加它。您稍后将能够接受自己的答案,这会将问题标记为已解决并将其从未回答的问题列表中删除。
  • @talonmies 就这样做了,前几天我没有机会这样做。脑放屁。
  • 感谢您这样做。

标签: opengl cuda linux-mint


【解决方案1】:

Linux Mint 不是officially supported distro for CUDA。因此,您使用的 CUDA 安装方法(在本例中为驱动程序安装部分)可能会将必要的 GL 库放置在 makefile 无法找到的位置。

如果您研究构建目录中的 findgllib.mk makefile "helper" 文件,我怀疑基于 debian 的发行版会遵循该 .mk 文件中的 UBUNTU 路径。对于非 ppc 和非 arm 分支,你会发现这样的定义:

ifeq ("$(UBUNTU)","0")
  ifeq ...
  ...
  else
    GLPATH    ?= /usr/lib/$(UBUNTU_PKG_NAME)
    GLLINK    ?= -L/usr/lib/$(UBUNTU_PKG_NAME)
    DFLT_PATH ?= /usr/lib

鉴于:

  1. 您已声明似乎已安装 GL 库。
  2. 您已将这些库符号链接到 /usr/lib 目录中
  3. .mk 文件中的 GLPATH 定义是“非覆盖”定义(即 ?=

我们可以用 /usr/lib 的“已知良好”之一“覆盖”或替换由 makefile 炮制的 GLPATH 定义:

GLPATH=/usr/lib

添加到您的 make 命令中。

【讨论】:

    【解决方案2】:

    同样的问题发生在我身上,我尝试了包括驱动程序安装在内的所有方法,但是当我查看 makefile(.mk) 时,指定了图形驱动程序版本,它会在我使用时检查操作系统发行版名称,例如(Ubuntu、fedora 等) Zorin 所以它无法找到分配给变量的路径。所以在矿工更改后它会成功运行。希望对你有帮助。

    变化是:

    //无论你有什么版本

    UBUNTU_PKG_NAME = "nvidia-375"
    

    // 在此列表中添加发行版名称

     ifeq (,$(filter $(DISTRO),ubuntu zorin fedora red rhel centos suse))
       DISTRO = 
     endif
    

    // 为特定发行版添加这一行

    ZORIN = $(shell echo $(DISTRO) | grep -i zorin      >/dev/null 2>&1; echo $$?)
    

    //如果需要,复制并粘贴与 ubuntu 相同的代码到指定发行版的文件中

    ifeq ("$(ZORIN)","0")
      ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-armv7l)
        GLPATH := /usr/arm-linux-gnueabihf/lib
        GLLINK := -L/usr/arm-linux-gnueabihf/lib
        ifneq ($(TARGET_FS),) 
          GLPATH += $(TARGET_FS)/usr/lib/$(UBUNTU_PKG_NAME)
          GLPATH += $(TARGET_FS)/usr/lib/arm-linux-gnueabihf
          GLLINK += -L$(TARGET_FS)/usr/lib/$(UBUNTU_PKG_NAME)
          GLLINK += -L$(TARGET_FS)/usr/lib/arm-linux-gnueabihf
        endif 
      else ifeq ($(HOST_ARCH)-$(TARGET_ARCH),x86_64-ppc64le)
        GLPATH := /usr/powerpc64le-linux-gnu/lib
        GLLINK := -L/usr/powerpc64le-linux-gnu/lib
      else
        GLPATH    ?= /usr/lib/$(UBUNTU_PKG_NAME)
        GLLINK    ?= -L/usr/lib/$(UBUNTU_PKG_NAME)
        DFLT_PATH ?= /usr/lib
      endif
    endif
    

    【讨论】:

      【解决方案3】:

      对于普通的 Debian,您可能需要使用以下内容:

      …
      SUSE   = $(shell echo $(DISTRO) | grep -i 'suse\|sles' >/dev/null 2>&1; echo $$?)
      DEBIAN = $(shell echo $(DISTRO) | grep -i debian       >/dev/null 2>&1; echo $$?)
      
      ifeq ("$(UBUNTU)","0")
      …
      

       

      …
      ifeq ("$(CENTOS)","0")
        GLPATH    ?= /usr/lib64/nvidia
        GLLINK    ?= -L/usr/lib64/nvidia
        DFLT_PATH ?= /usr/lib64
      endif
      ifeq ("$(DEBIAN)","0")
        GLPATH    ?= /usr/lib/x86_64-linux-gnu
        GLLINK    ?= -L/usr/lib/x86_64-linux-gnu
        DFLT_PATH ?= /usr/lib64
      endif
      
      # find libGL, libGLU 
      …
      

      在您的 cuda-samples/common/findgllib.mk 中,然后输入 cuda-samples 并执行 for f in $(find ?_* -name findgllib.mk); do cp -bv common/findgllib.mk $f; done 以将该文件用于每个 GL 样本

      【讨论】:

        猜你喜欢
        • 2023-03-15
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 2018-07-13
        • 1970-01-01
        相关资源
        最近更新 更多