如题,有一天vscode突然无法远程连接服务器(linux环境)了,试过网上的方法,删除.vscode-server,再重新连接还是没有起效。
看了一下我重新连接之后.vscode-server 也没有出现别的教程里提到的bin文件夹,只有cli文件夹,远程服务器也没有图形界面,不知道咋办,所以就想着那就看看cli文件下那个log文件有没有说是什么问题。
这个log文件中记录了
[2024-12-30 12:54:01] error This machine does not meet Visual Studio Code Server's prerequisites, expected either... - validate GLIBCXX version for GNU environments, but could not: No such file or directory (os error 2) - find /lib/ld-musl-x86_64.so.1, which is required to run the Visual Studio Code Server in musl environments
GPT说是因为
- 缺少
GLIBCXX
版本支持(与 GNU 环境相关)。 - 缺少
/lib/ld-musl-x86_64.so.1
(musl 环境中的必要库)
下面是解决步骤
1. 检查当前系统的 GLIBC
版本
运行以下命令检查当前安装的 GLIBC
版本:
ldd --version
输出如下正在使用 GLIBC 2.31,这是一个相对较新的版本,应该满足 Visual Studio Code Server 的最低要求。因此,
GLIBC
并不是问题的原因。
2.验证 libstdc++
是否完整
尽管 GLIBC
是正常的,但 libstdc++
(标准 C++ 库)可能缺失或版本过低。
运行以下命令检查系统中是否安装了 libstdc++6
:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
输出
说明系统提示缺少 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
文件。这是标准 C++ 库的共享对象文件,许多软件,包括 Visual Studio Code Server,都依赖它运行。
3.检查系统是否安装了 libstdc++6
dpkg -l | grep libstdc++6
有输出
libstdc++6
已正确安装在系统中,并且版本是 13.1.0-8ubuntu1~20.04.2
,这是较新的版本。然而,之前的错误显示找不到 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
,这可能是由于路径问题或链接缺失。
4.验证 libstdc++.so.6
文件路径
运行以下命令,查找 libstdc++.so.6
文件:
sudo find / -name "libstdc++.so.6"
输出了很多包含了libstdc++.so.6
文件的路径。
从 find
的结果看,路径 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
是存在的。你需要确认这个文件是否可以正确使用。
5. 确认正确的 libstdc++.so.6
文件
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
输出
说明 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
是无效文件或错误链接,需要重新创建链接。
6.找到正确的 libstdc++.so.6
文件
根据之前的 第4步中find
命令输出,多个路径下存在 libstdc++.so.6
文件。现在需要确认哪个文件是正确且支持的。我选择了红框中的这个。
strings /home/jx-vmlab/anaconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib/libstdc++.so.6 | grep GLIBCXX
然后输出了一大堆
从截图中可以看到,/home/jx-vmlab/anaconda3/pkgs/libstdcxx-ng-11.2.0.../lib/libstdc++.so.6
文件支持许多版本的 GLIBCXX
,包括 GLIBCXX_3.4.28
,这表明这是一个有效且兼容的 libstdc++.so.6
文件。
我们现在可以使用这个文件修复系统的 libstdc++.so.6
问题。
7.修复系统的 libstdc++.so.6
问题
7.1 删除无效的 /usr/lib/x86_64-linux-gnu/libstdc++.so.6
执行以下命令,删除系统中无效的文件或符号链接:
sudo rm -f /usr/lib/x86_64-linux-gnu/libstdc++.so.6
7.2 创建新的符号链接
使用这个有效的 libstdc++.so.6
文件,创建一个新的符号链接:
sudo ln -s /home/jx-vmlab/anaconda3/pkgs/libstdcxx-ng-11.2.0-h1234567_1/lib
7.3 验证链接是否正确
运行以下命令,确认符号链接已正确创建:
ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6
输出应该类似于
/usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> /home/jx-vmlab/anaconda3/pkgs/libst
7.4 更新动态链接库缓存
更新系统的动态链接库缓存,让系统加载新的库文件:
sudo ldconfig
这两步我的输出是
显示了一些 CUDA 库(例如
libcudnn_ops_infer.so.8
)的警告,提示它们 "不是符号链接"。这些警告与当前修复 libstdc++.so.6
的问题无直接关系,但可能会影响某些使用 CUDA 的程序。没管这些警告
8.验证版本支持
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
确保输出包含至少 GLIBCXX_3.4.22
和 GLIBCXX_3.4.28
。
我输出了这些
可以看到
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
文件已支持最新的 GLIBCXX
版本,包括 GLIBCXX_3.4.22
、GLIBCXX_3.4.28
等。
这表明 libstdc++6
的修复已经成功!
实际上我不清楚是不是到这里就解决问题了,因为我的小伙伴在另一台电脑上用vscode远程连接的时候没有进行下面的操作也能够连接成功了。
接下来gpt的建议是用下面这个代码,来验证Visual Studio Code Server 是否正常运行,但是实际上后面的一顿操作我也没有把server.sh给搞出来,也就是我是没有得到这个文件的,在这种情况下,直接用本地的vscode也能进行远程连接了。
~/.vscode-server/bin/<commit_id>/server.sh
这里的commit_id是这样获取的
打开本地的vscode,点击菜单栏的 帮助 → 关于,就会得到
红框中就是你的commit_id
因为这回我还是没有bin文件夹,所以我就接着往下做了。
.vscode-server
文件夹中缺少 bin
目录,这说明当前没有完整安装 Visual Studio Code Server,或者 VS Code 的远程连接未能正确完成安装。
于是手动下载 VS Code Server
①下载 VS Code Server压缩包
根据你的服务器架构(通常是 x86_64
),到以下网址下载对应的版本:
- 官方下载地址(替换
commit:之后的
commit_id 为你的commit_id): -
wget https://update.code.visualstudio.com/commit:f1a4fb101478ce6ec82fe9627c43efbf9e98c813/server-linux-x64/stable -O vscode-server.tar.gz
② 解压
解压文件到 .vscode-server/bin
下的对应目录:
mkdir -p ~/.vscode-server/bin/f1a4fb101478ce6ec82fe9627c43efbf9e98c813
tar -xzf vscode-server.tar.gz -C ~/.vscode-server/bin/f1a4fb101478ce6ec82fe9627c43efbf9e98c813 --strip-components=1
③ 检查解压后的内容
ls -l ~/.vscode-server/bin/f1a4fb101478ce6ec82fe9627c43efbf9e98c813
输出应该包含 server.sh
和其他文件,例如:
server.sh
node
bin/
lib/
extensions/
然后用命令启动VS Code Server
~/.vscode-server/bin/f1a4fb101478ce6ec82fe9627c43efbf9e98c813/server.sh
这两步是gpt的说法,我一直没有server.sh文件,尝试无果,然后看了一下其他能够正常连接的服务器也没有这个文件,所以尝试用vscode直接连接远程服务器,发现能够连接得上。
下面是我解压得到的
.vscode-server/bin/(commit_id文件名)目录下的文件目录。
终于重新连上服务器了,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。
但其中有些步骤我不是那么明白为什么,知道的小伙伴可以给我些指导😀