Я пытаюсь проверить установку CUDA и сталкиваюсь с некоторыми проблемами. Я успешно построил все примеры, которые идут с GPU computing SDK. Однако, когда я пытаюсь запустить deviceQuery, я получаю сообщение об ошибке, сообщающее, что libcudart.so.4 не может быть найден.
Однако:
echo $LD_LIBRARY_PATH
возвращается
/usr/local/cuda/lib64
Внутри этого каталога находится файл:
libcudart.so.4
Какие еще ошибки могут быть причиной невозможности найти библиотеку?
ИЗМЕНИТЬ ответ Фрэн:
- Да, я экспортирую переменную
- Я не уверен, является ли программа 64-битной, однако она была установлена как часть 64-битного SDK, поэтому я хотел бы предположить, что это так.
Вывод 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
Вы экспортировали
LD_LIBRARY_PATH
из оболочки, в которой запущена программа?Являются ли программа и разделяемая библиотека 64-битными двоичными файлами (или оба 32-битными двоичными файлами)?
Каков вывод
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 — помните, что чем больше путей вы добавляете, тем больше путей приходится просматривать динамическому компоновщику, чтобы найти его.