WSL vhdx非root误删除libc.so.6

本文介绍了如何在Windows Subsystem for Linux (WSL)环境下,通过挂载VHDX文件并重新建立软连接,解决不同发行版Ubuntu的libc.so.6问题,适用于迁移和兼容性处理。

思路

由于不在root这种情况的特殊性,没有办法使用网上例如LDPRELOAD进行软连接。则使用linux挂载ext4格式的vhdx然后重新进行软链接

挂载vhdx

wsl ubuntu 20.04的虚拟磁盘在windows下的这个目录,不同的发行版在package目录下的地址不一样
在这里插入图片描述
在Package目录下可以找到所有在windows应用商店下载的应用,

在这里插入图片描述
然后直接把虚拟磁盘文件复制到虚拟机中(这里我改名了)
在这里插入图片描述
挂载教程看这篇博客linux下挂载VHD等虚拟磁盘文件
我这里直接

sudo apt-get install qemu-kvm
sudo modprobe nbd max_part=8
sudo qemu-nbd -c /dev/nbd0 ext4.vhdx

然后就直接能在文件管理器里面看到未挂载的磁盘了,直接点一下就能自动挂载
在这里插入图片描述
然后进到之前存放libc.so.6的目录,每个系统的目录不一样ubuntu 20.04的在
/usr/lib/x86_64-linux-gnu/
然后创建软连接

sudo ln -s /lib/x86_64-linux-gnu/libc-2.31.so libc.so.6

在文件管理器中重新把磁盘unmount,然后替换原来的vhdx,它就回来了

<think>我们正在解决WSL中出现的动态链接库配置错误问题。具体错误信息是:1. `/sbin/ldconfig.real:Can’t link/usr/lib/wsl/lib/libnvoptix_loader.so.1 tolibnvoptix.so.1`2.`/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 isnot asymbolic link` 根据引用[3],解决方案涉及对`/usr/lib/wsl/lib/`目录下的文件进行操作。主要步骤是备份并修复符号链接。###解决方案步骤####步骤1:进入问题目录```bashcd/usr/lib/wsl/lib```####步骤2:备份现有文件(防止操作失误)```bashsudomv libcuda.so libcuda.so.baksudo mvlibcuda.so.1libcuda.so.1.bak```####步骤3:创建正确的符号链接```bash#创建libcuda.so.1指向实际库文件的符号链接(假设实际库文件为libcuda.so.1.1) sudoln -s libcuda.so.1.1 libcuda.so.1#创建libcuda.so指向libcuda.so.1的符号链接sudo ln-slibcuda.so.1libcuda.so```####步骤4:修复libnvoptix相关错误对于`libnvoptix_loader.so.1`链接到`libnvoptix.so.1`的问题,同样需要检查是否存在正确的库文件,并建立符号链接: ```bash#假设存在libnvoptix.so.1.1(或实际版本)文件sudo ln-slibnvoptix.so.1.1 libnvoptix.so.1sudoln -s libnvoptix.so.1libnvoptix_loader.so.1``` >**注意**:如果实际库文件名不是`libnvoptix.so.1.1`,请使用`ls`查看目录中的文件,并根据实际情况调整链接目标。 ####步骤5:更新动态链接器配置```bashsudo ldconfig``` ###验证修复运行以下命令检查是否还有错误:```bashsudoldconfig-v| grep-E'libcuda|libnvoptix' ```应无错误信息输出,并显示正确的符号链接关系。 ###原理说明-`ldconfig`用于维护共享库的缓存和符号链接。当库文件不是符号链接或链接断裂时,会报错。 -WSL的特殊性:WSL中NVIDIA驱动由主机提供,库文件可能更新不及时导致符号链接缺失[^3]。 ###备选方案如果上述步骤无效,可尝试重新安装WSL的NVIDIA驱动支持:```bashsudoapt install--reinstall nvidia-cuda-toolkit```§§相关问题§§1. WSL中如何正确安装NVIDIACUDA驱动?2.如何检查WSL中的CUDA版本与主机是否匹配? 3.动态链接库管理工具ldconfig的工作原理是什么?</think>### 解决 WSL 动态链接库符号链接错误 您在 WSL Ubuntu 中遇到的 `/sbin/ldconfig.real` 错误是由于 NVIDIA 相关库文件的符号链接配置不正确导致的。以下是完整解决方案: #### 🔧 错误原因分析 1. **符号链接断裂** `libcuda.so.1` 应该是符号链接而实体文件,但 WSL 安装过程中配置有误 2. **库文件版本不匹配** `libnvoptix_loader.so.1` 无法正确链接到 `libnvoptix.so.1`,表明库版本不一致 3. **WSL 特殊环境问题** WSL 的 GPU 支持层需要精确的符号链接配置[^2] --- ### 完整修复步骤 #### 步骤 1:进入问题目录并备份文件 ```bash cd /usr/lib/wsl/lib sudo mv libnvoptix_loader.so.1 libnvoptix_loader.so.1.bak # 备份问题文件 sudo mv libcuda.so libcuda.so.bak sudo mv libcuda.so.1 libcuda.so.1.bak ``` #### 步骤 2:重建正确的符号链接 ```bash # 修复 libcuda 链接 sudo ln -s libcuda.so.1.1 libcuda.so.1 # 注意版本号需匹配实际文件 sudo ln -s libcuda.so.1 libcuda.so # 修复 libnvoptix 链接 sudo ln -s libnvoptix.so.1 libnvoptix_loader.so.1 # 确保 libnvoptix.so.1 存在 ``` #### 步骤 3:验证链接关系 ```bash ls -l libcuda.so* libnvoptix* ``` 正常输出应显示正确的符号链接关系: ``` libcuda.so -> libcuda.so.1 libcuda.so.1 -> libcuda.so.1.1 libnvoptix_loader.so.1 -> libnvoptix.so.1 ``` #### 步骤 4:更新动态链接器配置 ```bash sudo ldconfig ``` 此时应不再报错,输出类似: ``` /sbin/ldconfig.real: 正在处理 /etc/ld.so.conf.d/* ``` #### 步骤 5:验证 NVIDIA 驱动状态 ```bash nvidia-smi # 应正常显示 GPU 信息 ``` --- ### ⚠️ 注意事项 1. **版本匹配** 如果步骤 2 报错 `cannot create symbolic link: File exists`,先删除旧链接: ```bash sudo rm libcuda.so libcuda.so.1 ``` 2. **跨版本升级问题** 主机 Windows 的 NVIDIA 驱动升级后,需重启 WSL: ```bash wsl --shutdown wsl # 重新启动 ``` 3. **完整重装方案** 若仍失败,彻底重装 CUDA 工具包: ```bash sudo apt purge nvidia-cuda-toolkit sudo apt install nvidia-cuda-toolkit ``` --- ### 技术原理 `ldconfig` 通过扫描 `/etc/ld.so.conf.d/` 维护动态库缓存。符号链接断裂会导致: 1. 运行时库加载失败 2. 版本控制混乱 3. GPU 加速功能异常 WSL 的特殊架构要求主机 GPU 驱动通过精确的符号链接映射到 Linux 环境[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值