本文内容:在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
组(推荐)
登录 root 用户
确保当前已使用 root 用户登录或已通过su -
切换到 root。将
admin
用户加入wheel
组
CentOS 默认允许wheel
组的成员使用 sudo:usermod -aG wheel admin
-aG
表示追加(-a
)到附加组(-G
),避免覆盖用户原有其他组。
验证 sudo 配置
检查/etc/sudoers
文件中是否已启用wheel
组的权限:visudo
确保包含以下行(默认已存在):
%wheel ALL=(ALL) ALL
测试 sudo 权限
切换到admin
用户,测试 sudo 是否生效:su - admin sudo whoami
输入
admin
的密码后,若输出root
则表示配置成功。
方法 2:直接编辑 sudoers 文件
如果不想将用户加入 wheel
组,可以单独为 admin
用户配置 sudo 权限:
使用
visudo
编辑配置文件
(此命令会检查语法,避免配置错误导致 sudo 不可用):visudo
在文件末尾添加以下行
admin ALL=(ALL) ALL
- 含义:
admin
用户在所有主机(ALL
)上可以切换到所有用户((ALL)
),并执行所有命令(ALL
)。
- 含义:
保存并退出
按Esc
,输入:wq
保存(Vi 编辑器操作)。
验证配置
切换到 admin
用户,执行需要 sudo 权限的命令:
su - admin
sudo systemctl restart sshd
根据配置输入密码(若未设置 NOPASSWD
),成功执行即表示配置生效。
更换yum源
以下操作尽量在root用户下操作(因为涉及系统目录的更改,需要较高的权限),如果是普通用户需要在命令前添加sudo
~
- 第一步首先将原先的yum源备份一下:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
- 下载阿里云镜像:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- 清空之前yum缓存:
yum clean all
- 创建新的缓存:
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 all
和 yum 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。 - 如果使用
FetchContent
或CPM
,建议 ≥ 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。这是因为:
devtoolset-9
的环境变量覆盖了系统默认路径
Red Hat/CentOS 的devtoolset
会通过/opt/rh/devtoolset-9/enable
脚本修改PATH
,导致其编译器优先级高于系统默认版本。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
验证步骤
确认当前环境的编译器版本
which g++ # 应显示 /usr/local/gcc-11.2.0/bin/g++ g++ --version # 应输出 11.2.0
检查 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 Tools 或 open-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
插件,用于远程连接:
远程连接成功后,可以打开虚拟机系统中的文件了。