解决 WSL2 中 `libcuda.so: cannot open shared object file` 报错

张开发
2026/5/31 21:04:54 15 分钟阅读
解决 WSL2 中 `libcuda.so: cannot open shared object file` 报错
在 WSL2 中运行 PyTorch、TensorFlow 或其他依赖 CUDA 加速的脚本时经常遇到如下报错Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory别慌这不是显卡驱动损坏也不是 CUDA 安装失败。这是 WSL2 特有的 GPU 直通机制导致的“动态库路径丢失”问题。本文将提供一键修复方案并附带原理说明与进阶避坑指南。 为什么会出现这个报错WSL2 的 GPU 加速采用Paravirtualization半虚拟化方案Windows 宿主机的 NVIDIA 驱动会自动将 CUDA 核心库映射到 WSL 内部的/usr/lib/wsl/lib目录下而非传统 Linux 的/usr/local/cuda/lib64。当 Python 或 C 程序启动时系统的动态链接器ld-linux.so会按照LD_LIBRARY_PATH搜索依赖库。由于该变量默认不包含 WSL 的映射路径链接器找不到libcuda.so和libcudnn_*.so就会抛出cannot open shared object file错误。✅ 3 步快速修复第 1 步确认你的 CUDA 库实际路径虽然绝大多数 WSL2 环境的路径为/usr/lib/wsl/lib但建议先验证ldconfig-p|greplibcuda.so正常输出示例libcuda.so.1 (libc6,x86-64) /usr/lib/wsl/lib/libcuda.so.1 libcuda.so (libc6,x86-64) /usr/lib/wsl/lib/libcuda.so记下后面的目录路径通常为/usr/lib/wsl/lib。第 2 步永久写入环境变量将路径追加到你的 Shell 配置文件中。使用bash的用户编辑~/.bashrc使用zsh的用户编辑~/.zshrc# 以 bash 为例echoexport LD_LIBRARY_PATH/usr/lib/wsl/lib:$LD_LIBRARY_PATH~/.bashrc⚠️ 注意请确保路径与第 1 步查到的实际目录一致。第 3 步生效并验证source~/.bashrc# 或 source ~/.zshrcecho$LD_LIBRARY_PATH输出末尾应包含/usr/lib/wsl/lib。重新运行你的 Python 脚本或深度学习框架报错即可消失。 进阶注意事项 避坑指南场景建议做法不想永久修改仅临时测试直接在终端运行export LD_LIBRARY_PATH/usr/lib/wsl/lib:$LD_LIBRARY_PATH关闭终端失效使用 Conda 环境Conda 激活时会覆盖LD_LIBRARY_PATH。若仍报错可在conda activate后手动 export或使用conda install cudatoolkit由 Conda 管理依赖系统级永久生效不推荐创建/etc/ld.so.conf.d/wsl-cuda.conf写入路径并执行sudo ldconfig。但 WSL 更新 Windows 驱动后路径可能变动环境变量方式更灵活安全验证 GPU 是否真正可用修复后运行python -c import torch; print(torch.cuda.is_available())应返回True

更多文章