我尝试过两种方法在 CentOS 7 系统上安装 Visual Studio Code。两种方法都失败了。
方法 1 - 按照官方说明进行操作(通过包管理器安装)
提供了在 CentOS 上安装 Visual Studio Code 的官方说明这里。这些说明建议通过包管理器安装,而不是下载最新稳定版本的 RPM。
如果将来说明的链接中断,我在此引用:
我们目前在 yum 存储库中提供稳定的 64 位 VS Code,以下脚本将安装密钥和存储库:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
然后更新包缓存并使用 dnf(Fedora 22 及以上版本)安装包:
dnf check-update
sudo dnf install code
或者在旧版本上使用 yum:
yum check-update
sudo yum install code
我已按照这些步骤操作,并且每个命令都成功。但是,当我code
在终端中运行 Visual Studio Code 时,Visual Studio Code 窗口没有响应。
方法 2 - 从 code.visualstudio.com 下载独立 RPM 安装
我的第二种方法是code.visualstudio.com 下载页面并下载适用于 64 位 Linux 的独立 RPM。
该网站没有提供校验和来验证下载,但我检查过该文件是一个有效的 RPM:
$ file code-1.59.0-1628120127.el8.x86_64.rpm
code-1.59.0-1628120127.el8.x86_64.rpm: RPM v3.0 bin i386/x86_64 code-1.59.0-1628120127.el8
接下来,我尝试使用 yum 进行安装,安装成功,退出代码为 0:
$ sudo yum install -y ./code-1.59.0-1628120127.el8.x86_64.rpm
<snipped>
Installed:
code.x86_64 0:1.59.0-1628120127.el8
Complete!
$ echo $?
0
结果
使用方法 1 和方法 2 时,当我安装后运行 Visual Studio 代码(我code
从终端运行以启动程序)时,Visual Studio 代码窗口没有响应。
问题是什么
这系统要求页面说 glibcxx 必须是 3.4.21 或更高版本,并且 glibc 必须是 2.15 或更高版本。
我的glibc是2.17版本,因此满足glibc的要求:
$ rpm -q glibc
glibc-2.17-324.el7_9.x86_64
当我检查我的系统时/usr/lib64/libstdc++.so.6
,我发现系统上可用的最高 gllibcxx 是 3.4.19:
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH
假设我的旧 glibcxx 版本有问题,如何在 CentOS 7 上安装 glibcxx 3.4.21 或更高版本?
答案1
libstdc++.so.6
我设法从头开始构建以使 Visual Studio 代码能够运行。
请注意,我的 CentOS 7 系统的架构是 x86_64。
我大致遵循了https://gcc.gnu.org/wiki/InstallingGCClibstdc++.so.6
。下面是我从 gcc 7.1.0 源代码构建时运行的命令:
sudo yum install gcc gcc-c++ # Installs gcc and g++ 4.8.5
wget http://mirrors.concertpass.com/gcc/releases/gcc-7.1.0/gcc-7.1.0.tar.gz
tar xzf gcc-7.1.0.tar.gz
cd gcc-7.1.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-7.1.0/configure --prefix=$HOME/gcc-7.1.0 --enable-languages=c,c++ --disable-multilib
make # I could not use -j, see details below
make install
然后我验证了libstdc++.so.6
我所构建的是否有我需要的 GLIBCXX:
$ strings $HOME/gcc-7.1.0/lib64/libstdc++.so.6 | grep ^GLIBCXX_3.4... | sort
GLIBCXX_3.4.10
<snip>
GLIBCXX_3.4.21
<snip>
GLIBCXX_3.4.23
然后我将以下 bash 函数添加到我的~/.bashrc
:
code() (
LD_LIBRARY_PATH="$HOME/gcc-7.1.0/lib64" /usr/bin/code "$@"
)
这个code
bash 函数提供了一种方便的方法来使用该LD_LIBRARY_PATH
设置运行 Visual Studio 代码,以便libstdc++.so.6
在运行时找到我的。
我已经为 Visual Studio Code 添加了 yum repo,因此我不再运行这些命令,但对于其他人,这些说明可用这里。
接下来我安装了 Visual Studio 代码,获取了我的源代码~/.bashrc
,并从命令行运行了 Visual Studio 代码:
sudo yum install code # Install visual studio code through yum
. ~/.bashrc # Source my ~/.bashrc
code # Invoke my code bash function
这次 Visual Studio 代码启动了,我能够与窗口交互。
为什么使用 gcc 和 g++ 4.8.5 而不是 devtoolset-*?
我之前尝试使用 devtoolset-8 从源代码编译 gcc,但没有成功。也许有办法让它工作,但我做知道使用通过 yum 安装的 gcc 4.8.5 进行编译确实有效。
为什么不提供-j
标志来make
加速编译?
当我尝试提供-j
以make
加快编译速度时,编译将无法找到标题(我忘记了哪一个)。
为什么要提供--disable-multilib
给configure
?
如果我没有向 提供该标志configure
,我会收到此错误消息:
collect2: error: ld returned 1 exit status
configure: error: I suspect your system does not have 32-bit development libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib.
由于我的 CentOS 7 具有 x86_64 架构,因此我选择使用--disable-multilib
和构建仅限 64 位的构建工件。