CUDA 缺少 libGL.so libGLU.so 和 libX11.so
CUDA missing libGL.so libGLU.so and libX11.so
这是人们 运行 遇到的标准问题,但我无法让它工作。我在 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
甚至符号链接到 /usr/lib/libGL.so 对于 nvidia-352 版本也不起作用。有人遇到过这个特殊问题吗?我尽量不把电脑搞砸,因为当我开始弄乱这些东西时,我遇到过驱动程序突然不工作的问题。
Linux Mint 不是 officially supported distro for CUDA。因此,您使用的 CUDA 安装方法(在本例中为驱动程序安装部分)可能会将必要的 GL 库放置在 makefile 无法找到的位置。
如果您研究构建目录中的 findgllib.mk
makefile "helper" 文件,我怀疑基于 debian 的发行版会遵循该 .mk
文件中的 UBUNTU
路径。对于 non-ppc 和 non-arm 分支,您会发现这样的定义:
ifeq ("$(UBUNTU)","0")
ifeq ...
...
else
GLPATH ?= /usr/lib/$(UBUNTU_PKG_NAME)
GLLINK ?= -L/usr/lib/$(UBUNTU_PKG_NAME)
DFLT_PATH ?= /usr/lib
鉴于:
- 您说似乎已安装 GL 库。
- 您已将这些库符号链接到 /usr/lib 目录
.mk
文件中的 GLPATH 定义是 "non-override" 定义(即 ?=
)
我们可以 "override" 或用 /usr/lib
之一的 "known good" 替换 makefile 编造的 GLPATH 定义:
GLPATH=/usr/lib
添加到您的 make
命令之前。
我遇到了同样的问题,我尝试了包括驱动程序安装在内的所有方法,但是当我查看 makefile(.mk) 时,指定了图形驱动程序版本,它会检查 OS 分发名称,例如(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
对于普通的 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 样本使用该文件
这是人们 运行 遇到的标准问题,但我无法让它工作。我在 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
甚至符号链接到 /usr/lib/libGL.so 对于 nvidia-352 版本也不起作用。有人遇到过这个特殊问题吗?我尽量不把电脑搞砸,因为当我开始弄乱这些东西时,我遇到过驱动程序突然不工作的问题。
Linux Mint 不是 officially supported distro for CUDA。因此,您使用的 CUDA 安装方法(在本例中为驱动程序安装部分)可能会将必要的 GL 库放置在 makefile 无法找到的位置。
如果您研究构建目录中的 findgllib.mk
makefile "helper" 文件,我怀疑基于 debian 的发行版会遵循该 .mk
文件中的 UBUNTU
路径。对于 non-ppc 和 non-arm 分支,您会发现这样的定义:
ifeq ("$(UBUNTU)","0")
ifeq ...
...
else
GLPATH ?= /usr/lib/$(UBUNTU_PKG_NAME)
GLLINK ?= -L/usr/lib/$(UBUNTU_PKG_NAME)
DFLT_PATH ?= /usr/lib
鉴于:
- 您说似乎已安装 GL 库。
- 您已将这些库符号链接到 /usr/lib 目录
.mk
文件中的 GLPATH 定义是 "non-override" 定义(即?=
)
我们可以 "override" 或用 /usr/lib
之一的 "known good" 替换 makefile 编造的 GLPATH 定义:
GLPATH=/usr/lib
添加到您的 make
命令之前。
我遇到了同样的问题,我尝试了包括驱动程序安装在内的所有方法,但是当我查看 makefile(.mk) 时,指定了图形驱动程序版本,它会检查 OS 分发名称,例如(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
对于普通的 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 样本使用该文件