VScode连接CentOS 7.6虚拟机

发布于:2025-04-06 ⋅ 阅读:(19) ⋅ 点赞:(0)

本文内容:在Windows上使用VMware运行虚拟机,然后使用VScode连接CentOS 7.6虚拟机。

进入系统前

安装VMware

安装教程参考:VMware安装

下载CentOS 7.6镜像

可以使用国内镜像源,但是一般国内镜像源要么已经不维护CentOS 7.6这个版本了,要么下载速度较慢≡(▔﹏▔)≡

也有其他人分享的网盘资源,但是如果没有网盘会员,下载也是非常痛苦的,如果你有会员直接搜索“CentOS 7.6镜像下载 百度网盘”即可。

解决方案:可以使用这个镜像源,下载速度还是比较快的:CentOS 7.6镜像

安装CentOS 7.6

打开VMware,点击创建虚拟机。
在这里插入图片描述
下一步后,选择你下载的镜像地址。

下面可以自定义一个安装路径(这个路径属于CentOS的系统路径,尽量直接放在D盘下,因为这个路径是系统路径,后续这个路径损坏了,CentOS系统可能就用不了):
在这里插入图片描述
点击自定硬件,没有强制要求(不过配置越高,后续安装工具时,速度会快一些):
在这里插入图片描述
可以自定义硬件参数:
在这里插入图片描述
开启虚拟机,装系统,这个过程可能比较慢:
在这里插入图片描述

这里的USER CREATE是表示进入系统后,会自动创建一个新的普通用户,这里不需要了,因前面已经了一个admin用户了(就是第一步让你输入用户名和密码那个用户,我忘记截图了),如果你需要一个新用户,也可以创建。

之后等待进入登陆即可。

进入系统后的配置

将普通用户设置sudo

在 CentOS 7.6 系统下,使用 root 用户将普通用户 admin 设置为可以进行 sudo 提权,可以按照以下步骤操作:


方法 1:将用户加入 wheel 组(推荐)

  1. 登录 root 用户
    确保当前已使用 root 用户登录或已通过 su - 切换到 root。

  2. admin 用户加入 wheel
    CentOS 默认允许 wheel 组的成员使用 sudo:

    usermod -aG wheel admin
    
    • -aG 表示追加(-a)到附加组(-G),避免覆盖用户原有其他组。
  3. 验证 sudo 配置
    检查 /etc/sudoers 文件中是否已启用 wheel 组的权限:

    visudo
    

    确保包含以下行(默认已存在):

    %wheel  ALL=(ALL)       ALL
    
  4. 测试 sudo 权限
    切换到 admin 用户,测试 sudo 是否生效:

    su - admin
    sudo whoami
    

    输入 admin 的密码后,若输出 root 则表示配置成功。


方法 2:直接编辑 sudoers 文件

如果不想将用户加入 wheel 组,可以单独为 admin 用户配置 sudo 权限:

  1. 使用 visudo 编辑配置文件
    (此命令会检查语法,避免配置错误导致 sudo 不可用):

    visudo
    
  2. 在文件末尾添加以下行

    admin   ALL=(ALL)       ALL
    
    • 含义:admin 用户在所有主机(ALL)上可以切换到所有用户((ALL)),并执行所有命令(ALL)。
  3. 保存并退出
    Esc,输入 :wq 保存(Vi 编辑器操作)。

验证配置

切换到 admin 用户,执行需要 sudo 权限的命令:

su - admin
sudo systemctl restart sshd

根据配置输入密码(若未设置 NOPASSWD),成功执行即表示配置生效。

更换yum源

以下操作尽量在root用户下操作(因为涉及系统目录的更改,需要较高的权限),如果是普通用户需要在命令前添加sudo~

  1. 第一步首先将原先的yum源备份一下:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
  1. 下载阿里云镜像:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 清空之前yum缓存:
yum clean all
  1. 创建新的缓存:
yum makecache

安装高版本的编译器

手动编译安装 GCC

如果需要的版本不在 SCL 仓库(如 GCC 11+),可以手动编译安装。

1. 安装依赖
yum install gmp-devel mpfr-devel libmpc-devel
2. 下载 GCC 源码
wget https://ftp.gnu.org/gnu/gcc/gcc-11.2.0/gcc-11.2.0.tar.gz
tar xzf gcc-11.2.0.tar.gz
cd gcc-11.2.0
3. 配置并编译
./configure --prefix=/usr/local/gcc-11.2.0 --disable-multilib
make -j$(nproc)
make install
4. 配置环境变量
echo 'export PATH=/usr/local/gcc-11.2.0/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

这一步在普通用户下也需要执行,否则普通用户使用的还是系统自带、较老的编译器。

配置动态库

还需要配置gcc11的动态库:

[admin@localhost test]$ g++ -print-file-name=libstdc++.so
/usr/local/gcc-11.2.0/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../lib64/libstdc++.so
[admin@localhost test]$ ls
test  test.cpp
[admin@localhost test]$ ldd ./test | grep libstdc++
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f09204a0000)

由上述可以看到,g++11动态库的路径在/usr/local/gcc-11.2.0/lib64/libstdc++.so.6中,但是程序在运行时加载的动态库却是/lib64/libstdc++.so.6,这样后续开发会存在问题,通过以下操作进行修改:

方法 1:临时指定运行时库路径(测试用)

export LD_LIBRARY_PATH=/usr/local/gcc-11.2.0/lib64:$LD_LIBRARY_PATH
ldd ./test | grep libstdc++  # 现在应显示 GCC 11.2.0 的路径

方法 2:永久生效(推荐)
将库路径添加到 ~/.bashrc 或系统配置:

echo 'export LD_LIBRARY_PATH=/usr/local/gcc-11.2.0/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

验证是否生效
重新编译并检查:

g++ test.cpp -o test
ldd ./test | grep libstdc++

输出应类似:

libstdc++.so.6 => /usr/local/gcc-11.2.0/lib64/libstdc++.so.6 (0x00007f...)
配置静态库
export LIBRARY_PATH=/usr/local/gcc-11.2.0/lib64:$LIBRARY_PATH
5. 验证安装
gcc --version

如果显示版本号为11.2.0,即为安装成功。

安装CMake

在 CentOS 7.6 上安装 CMake 时,版本选择取决于你的开发需求(如是否需要新特性、兼容性要求等)。以下是具体建议和安装方法:


1. 版本选择建议

需求场景 推荐 CMake 版本
基础编译需求 CMake 3.x
C++17/20 开发 CMake 3.12+
最新特性(如 CUDA) CMake 3.20+
  • CentOS 7 默认仓库的 CMake 版本较老(通常为 2.8.12 或 3.x 低版本),可能无法支持现代 C++ 项目。
  • 推荐至少安装 CMake 3.12+(支持 C++17 标准),若项目需要 C++20 或高级功能(如 FetchContent),建议安装 3.20+

2. 安装方法

前置准备

安装之前还需要保证我们的C++动态库是较高版本的,否则在执行后续生成makefile时会出现错误。

(虽然前面已经安装了gcc11版本,如果你没有正确地配置gcc11的动静态库,会导致找不到对应的库,有一种解决办法是先使用Developer Toolset替换C++动态库,安装CMake后,我们还是使用g++11,所以在安装完CMake之后还需要在覆盖环境变量并卸载Developer Toolset)

这里通过Developer Toolset来安装:

Red Hat/CentOS 提供了 Developer Toolset (DTS),包含较新的 GCC 版本(如 GCC 7/8/9/10/11/12/13),无需手动编译。

启用 SCL (Software Collections) 仓库

yum install centos-release-scl

这里需要进行yum clean allyum makecache,在 yum makecache时可能会出错:
在这里插入图片描述

通过以下操作来解决:

1. 检查并禁用残留的官方仓库
运行以下命令查看当前启用的仓库:

yum repolist

如果输出中包含 centos-sclo-rh 或类似官方仓库,说明阿里云的配置没有完全覆盖它,需要手动禁用:

sudo yum-config-manager --disable centos-sclo-rh

2. 确保阿里云的 sclo 仓库已正确配置
阿里云的 CentOS 7 镜像包含了 sclo 仓库,但可能需要手动启用:

sudo yum-config-manager --add-repo=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/

或者直接编辑 /etc/yum.repos.d/CentOS-SCLo-scl.repo

sudo vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

修改为阿里云镜像:

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

3. 清理缓存并重新生成

sudo yum clean all
sudo rm -rf /var/cache/yum
sudo yum makecache

4. 如果仍然失败:手动替换 baseurl
如果 mirrorlist 仍然报错,可以直接修改仓库文件,使用固定 baseurl 代替 mirrorlist

sudo vi /etc/yum.repos.d/CentOS-SCLo-scl.repo

找到 mirrorlist= 开头的行,注释掉(前面加 #),并添加:

baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/

在这里插入图片描述
然后再次运行:

sudo yum makecache

5. 终极解决方案:直接安装 centos-release-scl RPM
如果仍然无法访问,可以手动下载 centos-release-scl 并安装:

wget https://vault.centos.org/7.6.1810/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm
sudo rpm -ivh centos-release-scl-2-3.el7.centos.noarch.rpm

然后再试:

sudo yum makecache

安装devtoolset
查看可用的 GCC 版本:

yum list available devtoolset-*

在这里插入图片描述
我的系统中,最高的版本是 devtoolset-9所以安装:

yum install devtoolset-9

启用 GCC
临时启用(仅当前会话):

scl enable devtoolset-9 bash

永久启用(添加到 ~/.bashrc):

echo "source /opt/rh/devtoolset-9/enable" >> ~/.bashrc
source ~/.bashrc

验证版本

gcc --version

在这里插入图片描述

步骤 1:卸载旧版本(如有)
sudo yum remove cmake cmake3
步骤 2:下载并编译最新 CMake
# 安装依赖
sudo yum install gcc-c++ make openssl-devel

# 下载源码(以 CMake 3.28.3 为例)
wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3.tar.gz
tar -xzf cmake-3.28.3.tar.gz
cd cmake-3.28.3

# 编译安装
./bootstrap --prefix=/usr/local
make -j$(nproc)
sudo make install

# 验证安装
cmake --version  # 应输出 3.28.3
步骤 3:设置环境变量(可选)

如果 cmake 命令未生效,手动链接:

sudo ln -s /usr/local/bin/cmake /usr/bin/cmake

3. 版本兼容性验证

安装后,检查是否满足项目需求:

cmake --version
  • 关键功能验证
    • 如果项目需要 C++17,确保 CMake 版本 ≥ 3.12。
    • 如果使用 FetchContentCPM,建议 ≥ 3.20。

最后还需要将g++的版本改为g++11(在添加一下环境变量即可),并且我们不需要再使用devtoolset-9了,避免对后续使用的影响,我们可以将其删除掉:

可以先使用命令rpm -qa | grep devtoolset,查看你有哪些包,然后删除即可:

yum remove -y devtoolset-9-*

使用CMake可能出现的问题

我们使用命令g++ --version时,显示的是g++ 11,但是CMake会使用devtoolset-9,而不使用g++11, 因为devtoolset-9 的路径优先级更高,这也是之前我们为什么使用完devtoolset-9后,需要删除的原因。


当通过 update-alternatives 设置了默认编译器为 GCC 11.2.0,但 CMake 仍然优先使用了 devtoolset-9 的 GCC 9.3.1。这是因为:

  1. devtoolset-9 的环境变量覆盖了系统默认路径
    Red Hat/CentOS 的 devtoolset 会通过 /opt/rh/devtoolset-9/enable 脚本修改 PATH,导致其编译器优先级高于系统默认版本。

  2. CMake 缓存记录了旧编译器路径
    即使你更新了默认编译器,CMake 仍可能读取之前生成的缓存文件(CMakeCache.txt)。

解决方案

方法 1:禁用 devtoolset-9 的环境(推荐)

# 临时禁用 devtoolset-9(当前终端生效)
scl disable devtoolset-9 bash

# 永久禁用:从 ~/.bashrc 中删除 devtoolset-9 的启用命令
sed -i '/devtoolset-9/d' ~/.bashrc
source ~/.bashrc

方法 2:强制 CMake 使用 GCC 11.2.0

# 清理旧构建目录并重新配置
rm -rf build && mkdir build && cd build

# 显式指定编译器路径
cmake -DCMAKE_CXX_COMPILER=/usr/local/gcc-11.2.0/bin/g++ -DCMAKE_C_COMPILER=/usr/local/gcc-11.2.0/bin/gcc ..

# 验证编译器
cat CMakeCache.txt | grep CMAKE_CXX_COMPILER  # 应显示 GCC 11.2.0 的路径

方法 3:调整 PATH 优先级
确保 GCC 11.2.0 的路径在 devtoolset-9 之前:

export PATH=/usr/local/gcc-11.2.0/bin:$PATH

方法 4:完全卸载 devtoolset-9(谨慎操作)
如果不再需要 GCC 9.3.1,可以直接卸载:

sudo yum remove devtoolset-9

验证步骤

  1. 确认当前环境的编译器版本

    which g++          # 应显示 /usr/local/gcc-11.2.0/bin/g++
    g++ --version      # 应输出 11.2.0
    
  2. 检查 CMake 使用的编译器

    cmake -B build && cd build
    cat CMakeCache.txt | grep CMAKE_CXX_COMPILER  # 应指向 GCC 11.2.0
    

关键问题排查

现象 原因 解决方案
CMake 使用 devtoolset-9 的编译器 devtoolset-9 的路径优先级更高 禁用 devtoolset 或调整 PATH
CMakeCache.txt 记录旧路径 未清理构建目录 删除 build 目录重新生成
系统默认编译器仍是旧版 update-alternatives 未生效 检查 /usr/bin/g++ 的软链接目标

安装Git

这里暂时对版本没有要求,可以直接yum install -y git,后续有需求再重装即可。

虚拟机与Windows之间互传文件

可以参考这篇文章:https://blog.csdn.net/qq_43359615/article/details/128526366

在 VMware 虚拟机中设置共享文件夹后,CentOS 7.6 需要安装 VMware Toolsopen-vm-tools 才能识别共享文件夹。以下是详细步骤:


1. 确保 VMware 共享文件夹已正确配置

  • 在 VMware 虚拟机设置中:
    • 选择 “选项” (Options) → “共享文件夹” (Shared Folders)
    • 添加一个共享文件夹(如 D:\VM_Share),并勾选 “启用此共享” (Enable this share)

2. 安装 open-vm-tools(推荐)

CentOS 7.6 默认未安装 VMware Tools,建议使用开源替代品 open-vm-tools

# 安装 open-vm-tools
sudo yum install open-vm-tools

# 启动服务并设置开机自启
sudo systemctl start vmtoolsd
sudo systemctl enable vmtoolsd

3. 挂载共享文件夹

方法 1:手动挂载(临时生效)
# 创建挂载点目录
sudo mkdir /mnt/hgfs

# 手动挂载共享文件夹
sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
  • 验证是否成功
    ls /mnt/hgfs  # 应显示 Windows 共享的文件夹
    
方法 2:开机自动挂载(永久生效)
# 编辑 /etc/fstab 文件
sudo vi /etc/fstab

在文件末尾添加以下行:

.host:/    /mnt/hgfs    fuse.vmhgfs-fuse    defaults,allow_other    0    0

保存后执行:

sudo mount -a  # 重新加载 fstab

4. 解决常见问题

(1) 如果 /mnt/hgfs 为空
  • 检查 VMware Tools 是否正常运行:
    sudo systemctl status vmtoolsd
    
  • 重新加载模块:
    sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other
    
(2) 权限问题

如果无法访问共享文件夹,修改权限:

sudo chmod 777 /mnt/hgfs  # 临时放宽权限

或将用户加入 vboxsf 组(仅限 VirtualBox,VMware 无需此操作)。


5. 访问共享文件夹

  • 共享文件夹路径默认在 /mnt/hgfs/ 下:
    cd /mnt/hgfs/你的共享文件夹名
    
  • 如需读写文件,确保 Windows 共享文件夹的权限设置允许虚拟机访问。

VScode连接虚拟机

首先需要在CentOS系统中,使用终端,再输入命令:ifconfig查看虚拟的IP地址。
在这里插入图片描述

接着在VScode的插件市场安装ssh插件,用于远程连接:
在这里插入图片描述
在这里插入图片描述

远程连接成功后,可以打开虚拟机系统中的文件了。