CUDA отсутствует libGL.so libGLU.so и libX11.so

Это стандартная проблема, с которой люди сталкивались, но я не могу заставить ее работать. Я на Linux Mint 17.3 и сделал установку через репо. Когда я пытаюсь скомпилировать каталог 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 не работает. У кого-нибудь была эта конкретная проблема? Я пытаюсь не испортить компьютер, потому что у меня возникли проблемы с драйверами, внезапно не работающими, когда я начал возиться с такими вещами.

2 ответа

Решение

Linux Mint не является официально поддерживаемым дистрибутивом для CUDA. Поэтому вполне возможно, что используемый вами метод установки CUDA (в данном случае это часть установки драйвера) помещает необходимые библиотеки GL в место, которое make-файл не может найти.

Если вы изучаете findgllib.mk "вспомогательный" файл makefile в каталоге сборки, я подозреваю, что дистрибутив на основе Debian будет следовать UBUNTU путь в этом .mk файл. Для ветвей не-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

При условии:

  1. Вы заявили, что библиотеки GL, похоже, установлены.
  2. Вы вставили ссылки на эти библиотеки в каталог /usr/lib
  3. Определение GLPATH в .mk файл является "не переопределенным" определением (т.е. ?=)

мы можем "переопределить" или заменить определение GLPATH, придуманное make-файлом, на "заведомо удачное" одно из /usr/lib с:

GLPATH=/usr/lib

приурочен к вашему make команда.

Для простого 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

Та же проблема возникает со мной, и я попробовал все, включая установку драйвера, но когда я смотрел make-файл (.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
Другие вопросы по тегам