解决glibc版本低VSCode无法远程问题

因glibc版本低vscode无法远程

根本原因:本质上不是 vscode的问题,是vscode升级了其依赖的nodejs版本,nodejs高版本的要求最低版本的 glibc和libstdc++比较高。

从vscode 1.86 版本更新要求 GLIBCXX >= 3.4.25 GLIBC >= 2.28

一般这两种解决方案比较容易:

用老版本vscode 18.5

用老版本的vscode 尽量用vscode-portable不会影响你已有的vscode版本环境,下载一个老版本vscode的vscode-portable来用 https://portapps.io/app/vscode-portable/ 例如下载一个 version: 1.85.1-48 Pltaform:Windows 64-bits Format:Portable setup 来用。

旁路升级一套新的 高版本glibc和gcc

注意一定不要用root用户来操作,建议新增一个linux用户来搞,先进行试验。

旁路升级一套新的 高版本的 glibc 和 gcc,本质上不是 vscode的问题,是vscode升级了其依赖的nodejs版本,nodejs高版本的要求最低版本的 glibc和libstdc++比较高。解决方法就是让vscode的nodejs可执行文件的 动态库 去使用我们指定的 glic和 gcc lib。

glibc2.42

先现在一套glibc代码 http://ftp.gnu.org/gnu/libc/glibc-2.42.tar.gz

bash 复制代码
# 创建目录存源码
mkdir -p ~/build/glibc
cd ~/build/glibc
# 下载源码
wget http://ftp.gnu.org/gnu/libc/glibc-2.42.tar.gz
tar xf glibc-2.42.tar.gz
cd glibc-2.42
mkdir -p ~/local/glibc-2.42
mkdir build
cd build
# 请注意在此我们切换到我们尽量高的gcc版本 不然编译不过glibc也挺难搞
# gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 实际测试可以编译得过
../configure --prefix=$HOME/local/glibc-2.42
make -j$(nproc)
make install

不出意外此时 家目录下local/glibc-2.42有了glibc-2.42

gcc12.2.0

便一套高版本的 gcc,gcc-12.2.0,在 $HOME/local/gcc-12.2.0下

https://ftp.jaist.ac.jp/pub/GNU/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz

https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.2.1.tar.bz2

https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-4.1.0.tar.bz2

https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.2.1.tar.gz

bash 复制代码
# 解压gcc-12.2.0.tar.gz 得到 gcc-12.2.0 文件夹
tar -xjf gmp-6.2.1.tar.bz2
# 得到gmp-6.2.1文件夹
tar -xjf mpfr-4.1.0.tar.bz2
# 得到mpfr-4.1.0文件夹
tar -xzf mpc-1.2.1.tar.gz
# 得到mpc-1.2.1文件夹
cd gcc-12.2.0
ln -sf ../gmp-6.2.1 gmp
ln -sf ../mpfr-4.1.0 mpfr
ln -sf ../mpc-1.2.1 mpc
# 将我们的gmp mpfr mpc源码目录软连接到gcc-12.2.0下面 的 gmp mpfr mpc
cd ..
mkdir gcc-12.2.0-build
cd gcc-12.2.0-build
# 切换到gcc版本高的devtool
# gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 实际测试可以编译得过
../gcc-12.2.0/configure --prefix=$HOME/local/gcc-12.2.0 --enable-languages=c,c++ --disable-multilib
make -j10
make install

不出意外你将会在 $HOME/local/gcc-12.2.0下得到一份 gcc12.2.0

patchelf

下载patchelf源码编译出patchelf可执行文件

bash 复制代码
mkdir -p ~/build/patchelf
cd ~/build/patchelf
# 下载https://github.com/NixOS/patchelf/releases/download/0.17.3/patchelf-0.17.3.tar.bz2
tar xf patchelf-0.17.3.tar.bz2
cd patchelf-0.17.3
# 切换到gcc版本搞的devtool
# gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) 实际测试可以编译得过
./configure --prefix=$HOME/local/patchelf
make -j$(nproc)
make install

修改vscode需要的环境变量

bash 复制代码
cd ~
mv .vscode-server .vscode-server-old

在~/.bashrc下加一下

bash 复制代码
export VSCODE_SERVER_CUSTOM_GLIBC_LINKER=$HOME/local/glibc-2.28/lib/ld-2.28.so
export VSCODE_SERVER_CUSTOM_GLIBC_PATH=$HOME/local/glibc-2.28/lib:/data/home/gaowanlu/local/gcc-12.2.0/lib64
export VSCODE_SERVER_PATCHELF_PATH=$HOME/local/patchelf/bin/patchelf

请注意先检查下 上面的这三个路径是否生产存在

然后使用最新版本的vscode重新远程连接到我们刚才配置的主机的用户。

不出意外既可以正常使用了,正常远程连接可以使用后,可以看一下vscode-server的nodejs可执行文件用的glibc和gcc lib

bash 复制代码
[gaowanlu@vhost02 server]$ pwd
/data/home/gaowanlu/.vscode-server/cli/servers/Stable-7d842fb85a0275a4a8e4d7e040d2625abbf7f084/server
[gaowanlu@vhost02 server]$ ls
bin  extensions  LICENSE  node  node_modules  out  package.json  product.json
[gaowanlu@vhost02 server]$ ldd ./node
        linux-vdso.so.1 =>  (0x00007ffc2e9b6000)
        libdl.so.2 => /data/home/gaowanlu/local/glibc-2.28/lib/libdl.so.2 (0x00007f6120cbf000)
        libstdc++.so.6 => /data/home/gaowanlu/local/gcc-12.2.0/lib64/libstdc++.so.6 (0x00007f61208a9000)
        libm.so.6 => /data/home/gaowanlu/local/glibc-2.28/lib/libm.so.6 (0x00007f612052b000)
        libgcc_s.so.1 => /data/home/gaowanlu/local/gcc-12.2.0/lib64/libgcc_s.so.1 (0x00007f612030d000)
        libpthread.so.0 => /data/home/gaowanlu/local/glibc-2.28/lib/libpthread.so.0 (0x00007f61200ee000)
        libc.so.6 => /data/home/gaowanlu/local/glibc-2.28/lib/libc.so.6 (0x00007f611fd36000)
        /data/home/gaowanlu/local/glibc-2.28/lib/ld-2.28.so => /lib64/ld-linux-x86-64.so.2 (0x00007f6120ec3000)

也可以看出用的是我们旁路 编译出的高版本 lib

其实vscode通过环境变量替我们做了

bash 复制代码
$HOME/local/patchelf/bin/patchelf \
>  --set-interpreter $HOME/local/glibc-2.28/lib/ld-2.28.so \
> --set-rpath $HOME/local/glibc-2.28/lib:$HOME/local/gcc-12.2.0/lib64 \
> --force-rpath ./node 
相关推荐
时光追逐者1 小时前
Visual Studio 2026 现已正式发布,更快、更智能!
ide·c#·.net·visual studio
你还满意吗2 小时前
开发工具推荐
编辑器
weixin_377634847 小时前
【Git使用】PyCharm中的Git使用
ide·git·pycharm
亮子AI7 小时前
如何做一个类似Word的编辑器?要有修改标记功能
编辑器·word
喂自己代言8 小时前
VS Code中提升效率的实用快捷键(中英双语版)
vscode
爱吃泡芙的小白白9 小时前
vscode、anaconda、git、python配置安装(自用)
ide·git·vscode·python·anaconda·学习记录
Rover.x12 小时前
错误:找不到或无法加载主类 @C:\Users\AppData\Local\Temp\idea_arg_file223456232
java·ide·intellij-idea
2501_941823061 天前
强化学习在边缘AI智能控制中的应用与多语言实现实践指南
ide
a***13141 天前
vscode配置django环境并创建django项目(全图文操作)
vscode·django·sqlite
dntktop1 天前
搜索+计算+插件…这个“全能管家”让你告别80%的桌面图标
运维·windows·自动化·编辑器