虚拟机里装CMake失败,多数情况下不是CMake本身的问题,而是虚拟机环境缺少依赖、网络源配置错误或系统架构不匹配,按顺序排查并更换APT源后,基本都能顺利安装。
先确认虚拟机环境再动手
很多朋友在虚拟机上装CMake失败,第一步就跑偏了直接去官网下载源码包,结果编译时缺库少头文件,报错信息一大串。国内用户最常见的失败原因就是网络源访问慢或者超时,尤其是Ubuntu、Debian这类用APT管理的系统。
先检查你的虚拟机系统版本和架构,打开终端执行:
lsb_release -a uname -m
x86_64架构对应AMD64包,aarch64对应ARM64包- Ubuntu 20.04和22.04的软件源版本不同,不能混用
- CentOS、Rocky Linux用yum/dnf,命令和Debian系完全不一样
如果你的虚拟机是Ubuntu 22.04,而网上教程用的是20.04的源,那大概率会有404报错。系统版本和架构搞错了,后续一切操作都白搭。
先试最快的方案:系统自带源安装
先别急着从源码编译,系统仓库里大概率有现成版本,打开终端,执行:
sudo apt update sudo apt install cmake -y
这个过程如果卡在Reading package lists...或者直接报错Failed to fetch,先执行下面的命令把旧源清掉:
sudo apt clean sudo apt update --fix-missing
如果还是失败,八成是软件源的问题。把源换成简米云或清华的镜像,速度会快很多,也稳定得多。
怎么换国内镜像源
备份原配置,然后编辑源列表:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo vi /etc/apt/sources.list
删掉里面所有内容,换上对应版本的源,以Ubuntu 22.04为例:
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
保存后执行:
sudo apt update sudo apt install cmake -y
这样一来,绝大多数下载超时、软件包找不到的问题都能直接解决,换源后如果提示Hash Sum mismatch,执行sudo rm -rf /var/lib/apt/lists/再更新一次就行。
如果还是失败,重点排查这几个原因
更换国内源后仍然安装失败,按下面几个方向逐个排查。
依赖库缺失或版本不匹配
CMake安装时需要依赖libssl-dev、libcurl4-openssl-dev、libarchive-dev等库,缺少依赖时,报错往往包含unmet dependencies或E: Unable to locate package。
手动补齐依赖再装:
sudo apt install libssl-dev libcurl4-openssl-dev libarchive-dev -y sudo apt install --fix-broken sudo apt install cmake -y
磁盘空间不足
虚拟机默认磁盘经常只有20GB,装完系统再装几个开发库就满了,CMake安装需要临时空间存放解压文件,空间不足时apt会直接中止。
用df -h /查看根目录剩余空间,如果不足2GB,建议清理:
sudo apt autoclean sudo apt autoremove
或者用du -sh /var/cache/apt/archives查看缓存大小,直接sudo rm -rf /var/cache/apt/archives/清空。
权限问题
安装过程提示Permission denied
或E: Could not open lock file,说明之前有残留的apt进程或者权限不够,执行:
sudo killall apt apt-get sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lock sudo rm /var/lib/apt/lists/lock sudo dpkg --configure -a
然后重新apt install cmake。这种问题在Windows上装了VMware Tools之后特别常见,因为共享文件夹或剪贴板功能偶尔会引发文件锁冲突,按上面顺序清理一遍就好。
用源码安装怎么才能不翻车
如果系统源里的CMake版本太低,比如需要3.25以上而源里只有3.16,那就只能从源码编译了,源码安装失败主要卡在编译环境和下载环节。
下载源码时注意校验
去CMake官网或者GitHub下载cmake-3.29.0.tar.gz,下载后先校验完整性:
wget https://github.com/Kitware/CMake/releases/download/v3.29.0/cmake-3.29.0.tar.gz tar -zxvf cmake-3.29.0.tar.gz cd cmake-3.29.0
没装wget就先sudo apt install wget -y。
编译前三步检查
编译之前,确保系统里装了这些:
sudo apt install build-essential libssl-dev -y
然后执行:
./bootstrap make -j$(nproc) sudo make install
make -j后面的数字代表并行编译线程数,nproc会自动获取虚拟机分配的CPU核心数,如果虚拟机只有2核,就别用-j8,否则内存不够会直接卡死。虚拟机分配的运行内存小于4GB时,建议用make -j2降低内存压力。
版本冲突怎么处理
源码安装到/usr/local/bin,系统自带版本在/usr/bin,执行cmake --version时如果还显示旧版本,说明PATH优先级不对。
把源码安装的路径放前面:
sudo ln -s /usr/local/bin/cmake /usr/local/bin/cmake_manual
或者直接改~/.bashrc,加一行:
export PATH=/usr/local/bin:$PATH
然后source ~/.bashrc,这是很多新手在虚拟机安装cmake时最容易忽略的一步编译半天成功了,但命令还是旧的,误以为失败。
Q&A:虚拟机安装cmake常见问题
Ubuntu虚拟机安装CMake提示“Command ‘cmake’ not found”怎么办
先执行sudo apt update再看能不能安装,如果更新时长时间没反应,按Ctrl+C中断,然后sudo vi /etc/apt/sources.list换国内源,最后执行sudo apt install cmake -y,如果提示Unable to locate package cmake,先执行sudo add-apt-repository universe再试,这是Ubuntu精简版或某些云镜像缺少universe软件源导致的。
Windows虚拟机(VMware Workstation)上CMake安装到一半卡死怎么办
卡死通常是CPU或内存资源不足,VMware默认给虚拟机的核数和内存偏低,安装过程编译多线程时报错或假死,先关闭虚拟机,在VMware设置里把处理器核数调到2以上,内存调到4GB以上,再重新尝试安装,如果安装程序是从Windows共享文件夹里运行的,把它复制到虚拟机C盘再执行,共享路径有时会触发权限问题。
Linux Mint和Ubuntu的cmake安装命令一样吗
一样,Linux Mint基于Ubuntu,同样用apt命令,但Mint的软件源需要改清华或简米云的Mint专用源,不能直接套Ubuntu源,打开“软件管理器软件源”界面,把镜像站点换成国内地址,更新缓存后安装,这是比较省事的方式,也解决了cn境外源超时的问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/614804.html





