我正在尝试验证 CUDA 的安装,但遇到了一些问题。我已成功构建了 GPU 计算 SDK 附带的所有示例。但是,当我尝试运行 deviceQuery 时,出现错误,提示找不到 libcudart.so.4。
然而:
echo $LD_LIBRARY_PATH
返回
/usr/local/cuda/lib64
该目录内有一个文件:
libcudart.so.4
还有哪些错误可能导致无法找到该库?
编辑 Fran 的回答:
- 是的,我正在导出变量
- 我不确定该程序是否是 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
您是否从运行该程序的 shell 中导出了?程序和共享库都是 64 位二进制文件吗(或者都是 32 位二进制文件)?
输出是什么
ldd program
,program
运行时找不到库的程序在哪里?
答案2
如果您从源代码构建,则可以选择通过 --prefix= 或 --libdir= 使用现有库路径进行构建。否则,您可以:
- 将 /usr/local/cuda/lib64 添加到 /etc/profile 中的 LD_LIBRARY_PATH
- 手动移动它(例如移动到 /usr/local/)并为 /usr/local/cuda 创建一个到 /usr/local 的符号链接
- 使用 LDPRELOAD 手动预加载缺失的库
关于LD_LIBRARY_PATH的一个快速提醒——请记住,您添加的路径越多,动态链接器就需要查看越多的路径来找到它。