启动 VS Code 挂起 "GLIBCXX_3.4.20 not found",我可以在非标准位置指向 libstdc++.so.6 吗?

Starting VS Code hangs with "GLIBCXX_3.4.20 not found", Can I point to a libstdc++.so.6 in a non-standard location?

运行 RHEL 7.7 在计算集群的头节点上。当我打开 VS Code 1.57.1​​ 时,它挂在介绍屏幕上。 运行 $ code --verbose,显示错误:/usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.20 not found。我必须 kill -9 挂起的 code 进程。 Google 告诉我新版本的 VS Code 使用需要更新 GLIBCXX 版本的 Electron。

/usr/lib64/libstdc++中安装的版本肯定已经过时了,我更新不了。但我确实有一个更新版本的 GCC,它由 $ module load gcc8/8.4.0 命令加载,该命令从 /cm/shared/apps/gcc8/8.4.0/ 加载 GCC。库 /cm/shared/apps/gcc8/8.4.0/lib64/libstdc++.so.6 具有请求的 GLIBCXX 版本。

我尝试在 运行 代码之前加载 gcc8,但这并没有改变错误。

有没有办法让 VS Code 使用 libstdc++.so.6 的替代位置?是否有更新系统范围的 libstdc++.so.6 库的替代方法?

这是来自 --verbose:

的完整错误消息

错误:/usr/lib64/libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”(/usr/share/code/resources/app/node_modules.asar.unpacked/spdlog/build/Release/spdlog.node 需要) 在 process.func [作为 dlopen] (electron/js2c/asar_bundle.js:5:1846)

这显示了 libstdc++ 的过时默认版本:

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...
GLIBCXX_3.4.18
GLIBCXX_3.4.19   <----Nope, this version is too old!
GLIBCXX_DEBUG_MESSAGE_LENGTH

这表明其他 libstdc++ 库具有所需的版本:

$ strings /cm/shared/apps/gcc8/8.4.0/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...
GLIBCXX_3.4.19
GLIBCXX_3.4.20   <--- Here it is!
GLIBCXX_3.4.21
...
GLIBCXX_3.4.25
GLIBCXX_DEBUG_MESSAGE_LENGTH

根据 scroveez 的建议,/usr/lib64/libstdc++.so.6 确实是旧版本的符号链接。为了修复它,我将 'new' 版本 25 库复制到 /usr/lib64/ 并更改了符号链接以指向较新的版本。

$ ll /usr/lib/libstdc++.so.*
lrwxrwxrwx 1 root root      18 Apr 30  2019 /usr/lib/libstdc++.so.5 -> libstdc++.so.5.0.7
-rwxr-xr-x 1 root root  739520 Nov 13  2014 /usr/lib/libstdc++.so.5.0.7
lrwxrwxrwx 1 root root      19 Jul  6 08:56 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.25
-rwxr-xr-x 1 root root  934644 Mar 25  2020 /usr/lib/libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 1570176 Jul  6 08:55 /usr/lib/libstdc++.so.6.0.25
$