Библиотека не находится в каталоге, указанном в LD_LIBRARY_PATH

Библиотека не находится в каталоге, указанном в LD_LIBRARY_PATH

Я пытаюсь проверить установку CUDA и сталкиваюсь с некоторыми проблемами. Я успешно построил все примеры, которые идут с GPU computing SDK. Однако, когда я пытаюсь запустить deviceQuery, я получаю сообщение об ошибке, сообщающее, что libcudart.so.4 не может быть найден.

Однако:

echo $LD_LIBRARY_PATH

возвращается

/usr/local/cuda/lib64

Внутри этого каталога находится файл:

libcudart.so.4

Какие еще ошибки могут быть причиной невозможности найти библиотеку?

ИЗМЕНИТЬ ответ Фрэн:

  1. Да, я экспортирую переменную
  2. Я не уверен, является ли программа 64-битной, однако она была установлена ​​как часть 64-битного SDK, поэтому я хотел бы предположить, что это так.
  3. Вывод ldd:

    #ldd deviceQuery
    linux-vdso.so.1 =>  (0x00007fff94ecc000)
    libcudart.so.4 => /usr/local/cuda/lib64/libcudart.so.4 (0x00007f2d4658a000)
    libcuda.so.1 => /usr/lib64/libcuda.so.1 (0x00007f2d45b1e000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000037f1200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000037e5e00000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000037f0600000)
    libc.so.6 => /lib64/libc.so.6 (0x00000037e5600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000037e5a00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000037e5200000)
    librt.so.1 => /lib64/librt.so.1 (0x00000037e6200000)
    libz.so.1 => /lib64/libz.so.1 (0x00000037e6e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000037e4e00000)
    

Я обнаружил, что могу запустить его как обычный пользователь, но это приводит к сбою, поскольку у пользователя нет доступа к GPU. Запуск его с sudo приводит к ошибке отсутствующего файла.

Бег:

sudo ldd deviceQuery

подтверждает отсутствие libcudart.so.4 во второй строке вывода.

решение1

  1. Вы экспортировали LD_LIBRARY_PATHиз оболочки, в которой запущена программа?

  2. Являются ли программа и разделяемая библиотека 64-битными двоичными файлами (или оба 32-битными двоичными файлами)?

  3. Каков вывод ldd program, где programнаходится программа, которая не может найти библиотеку во время выполнения?

решение2

Если вы собираете из исходников, у вас есть возможность собрать его так, чтобы он использовал существующий путь к библиотеке через --prefix= или --libdir=. В противном случае вы можете:

  • добавьте /usr/local/cuda/lib64 в LD_LIBRARY_PATH в /etc/profile
  • переместите его вручную (например, в /usr/local/) и создайте символическую ссылку для /usr/local/cuda на /usr/local
  • используйте LDPRELOAD для предварительной загрузки отсутствующих библиотек вручную

Просто краткое напоминание о LD_LIBRARY_PATH — помните, что чем больше путей вы добавляете, тем больше путей приходится просматривать динамическому компоновщику, чтобы найти его.

Связанный контент