QEMU
是一个强大的开源硬件虚拟化软件,可以在多种操作系统上运行。本文将详细介绍如何在 Linux
平台上从源码编译 QEMU
,并创建和配置一个虚拟机。我们将使用 CentOS 8.5
作为示例操作系统,但部分步骤同样适用于其他操作系统(如 Ubuntu
)。
QEMU
(Quick Emulator
)是一个强大的开源虚拟化工具,可以模拟整个计算机系统,包括 CPU
、内存、硬盘、网卡等。结合 KVM
(Kernel-based Virtual Machine
),QEMU
可以提供高效的虚拟化性能。
在开始之前,确保你的系统已经安装了必要的依赖项。以下命令适用于基于 Red Hat
的系统(如 CentOS
和 Fedora
):
sudo dnf install pixman-devel -y
下载 QEMU 源码:
wget https://download.qemu.org/qemu-8.2.0.tar.xz
tar -xvf qemu-8.2.0.tar.xz
cd qemu-8.2.0
安装编译依赖:
sudo yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex patchutils gcc gcc-c++ zlib-devel expat-devel libslirp-devel -y
sudo dnf group install "Development Tools" -y
安装 texinfo:
wget https://ftp.gnu.org/gnu/texinfo/texinfo-6.8.tar.xz
tar -xvf texinfo-6.8.tar.xz
cd texinfo-6.8
./configure
make
make install
编译和安装 QEMU:
cd qemu-8.2.0
./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list="x86_64-softmmu" --enable-slirp
make -j $(nproc)
make install
configure
脚本用于生成 Makefile
,其选项可以用 ./configure --help
查看。这里使用到的选项含义如下:
--enable-kvm:编译 KVM
模块,使 QEMU
可以利用 KVM
来访问硬件提供的虚拟化服务
--enable-debug:启用调试符号的生成,这有助于调试程序。
--enable-vnc:启用 VNC
支持,允许通过 VNC
客户端连接到 QEMU
实例,并查看其图形输出。
--enalbe-werror:告诉编译器将所有的警告都视为错误,这样可以确保代码质量更高,任何可能的问题都会阻止编译过程。
--target-list="x86_64-softmmu":选择目标机器的架构。默认将所有的架构都编译,但为了更快完成编译,指定要构建的目标体系结构。在这个例子中,它指定了 x86_64
架构,并且使用软MMU
(内存管理单元),这意味着 QEMU
将模拟硬件的内存管理功能。
--enable-slirp:启用 SLiRP
,使 qemu
增加了一种 user mode
的网络后端实现,该网络后端的实现是在用户态实现的一套 tcp/ip
协议栈。
整个命令的作用就是配置 QEMU
的编译选项,以便它可以支持 KVM
加速、VNC
连接、调试信息,并且能够模拟 x86_64
架构的机器,同时提供 SLiRP
网络支持。这些配置完成后,接下来就可以通过 make
命令开始编译过程了。
这里需要注意,开启 --enable-slirp
后,可能会遇到如下错误:qemu-system-x86_64: error while loading shared libraries: libslirp.so.0: cannot open shared object file: No such file or directory
,这个错误表明 QEMU
在启动时无法找到或加载 libslirp.so.0
库。libslirp.so.0
是 QEMU
用户模式网络支持的一部分,用于模拟网络连接。当 QEMU
尝试使用用户模式网络 (-netdev user
) 时,需要这个库来完成网络仿真。为安装 libslirp.so.0
库,可通过如下方式:
wget https://gitlab.freedesktop.org/slirp/libslirp/-/archive/v4.8.0/libslirp-v4.8.0.tar.bz2
tar -xvjf libslirp-v4.8.0.tar.bz2
mkdir build
cd build
meson setup --prefix=/usr --buildtype=release ..
ninja
ninja install
即使库文件已经安装,但如果 QEMU
可执行文件所在环境的 LD_LIBRARY_PATH
中没有包含库文件所在的目录,可以手动设置 LD_LIBRARY_PATH
:
export LD_LIBRARY_PATH=/path/to/libslirp:$LD_LIBRARY_PATH
如果 libslirp.so.0
存在于 /usr/lib64
目录中:
export LD_LIBRARY_PATH=/usr/lib64:$LD_LIBRARY_PATH
通过上述步骤,你应该能够解决 QEMU
在启动时无法找到 libslirp.so.0
的问题。如果问题仍然存在,请进一步检查其他配置或环境问题。
使用 qemu-img
工具创建一个新的磁盘镜像文件。这里我们创建一个 100 GB
的 qcow2
格式的磁盘镜像。
qemu-img create -f qcow2 CentOS-8.5-VM.qcow2 100G
qemu-system-x86_64
是一个基于 QEMU
的命令行工具,用于模拟 x86
架构的计算机系统。假设您要在虚拟机中安装 x86
架构操作系统,可以使用 qemu-system-x86_64
命令创建虚拟机并安装操作系统,这里假设你已经下载了 CentOS-8.5.2111-x86_64-dvd1.iso
文件。
qemu-system-x86_64 -name CentOS-8.5-VM -smp 4 -m 4096 -enable-kvm -boot order=dc,once=d -hda /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2 -cdrom /home/tmp/image/qemu/vImage/CentOS-8.5/CentOS-8.5.2111-x86_64-dvd1.iso -netdev user,id=mynic0,hostfwd=tcp::1234-:22 -device virtio-net-pci,netdev=mynic0,mac=52:54:98:76:54:32 -vnc :10 -serial stdio -machine usb=on -device usb-tablet
qemu-system-x86_64
命令用来创建一个虚拟机,并配置了一些基本的参数。这个命令的各个参数意义如下:
qemu-system-x86_64: QEMU
的二进制文件名,这里表示运行 x86_64
架构的系统级模拟器。
-name CentOS-8.5-VM:为虚拟机命名,虽然这不是一个必需的参数,但它可以用于标识虚拟机,便于日志记录或管理。
-smp n [,cores=cores][,threads=threads][,sockets=sockets] [,maxcpus=maxcpus]:
设置客户机总共有 n
个逻辑 CPU
,并设置了其中 CPU socket
的数量、每个 socket
上核心(core
)的数量、每个核心上的线程(thread
)数量。其中:n = sockets x cores x threads
。
n:虚拟CPU(vcpu
)的个数,每个 thread
都视为一个虚拟 CPU 。
cores:每个 CPU 拥有的 CPU 核心数目
threads:每个 CPU 核心拥有的线程数目。
sockets :CPU 插槽数目,也就是 CPU 的个数。
maxcpus: 根据文档,是设置可热插拔的 CPU 数量,经测试,n
的值不可超过maxcpus
。
-m 4096:设置虚拟机内存大小为 4096 MB(4 GB)
,默认单位是 MB
。
-enable-kvm:启用 KVM
加速,提高虚拟机性能。KVM
(Kernel-based Virtual Machine
)是一种全虚拟化技术,利用 Linux
内核作为 Hypervisor
。
-boot order=dc,once=d:定义设备的引导次序,每种设备使用一个字符表示,a,b
表示软驱,c
表示第一块硬盘,d
表示第一个光驱,n-p
表示网络适配器。这里表示设置引导顺序为从 CD-ROM
(d
表示 CD-ROM
)引导,如果没有 CD-ROM
,则从硬盘(c
表示硬盘)引导。once=d
表示仅在首次启动时尝试从 CD-ROM
引导,之后的启动都从硬盘引导。
-hda /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2:指定虚拟机的硬盘映像文件 /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2
,并将其作为第一个硬盘(hda
)加载。
-cdrom /home/tmp/image/qemu/vImage/CentOS-8.5/CentOS-8.5.2111-x86_64-dvd1.iso:指定 ISO
文件的位置 /home/tmp/image/qemu/vImage/CentOS-8.5/CentOS-8.5.2111-x86_64-dvd1.iso
,并将它作为虚拟 CD-ROM
设备加载。
-netdev user,id=mynic0,hostfwd=tcp::1234-:22: 配置网络设备,user
表示使用用户模式网络,即通过 QEMU
本身的网络栈模拟网络连接。id=mynic0
给这个网络设备分配一个标识符 mynic0
。hostfwd=tcp::1234-:22
表示将主机的端口 1234
映射到虚拟机的端口 22
(SSH
默认端口)。
注意:
user
指config user mode host network backend
, 端口转发配置格式为:hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport
。
-device virtio-net-pci,netdev=mynic0,mac=52:54:98:76:54:32: 添加一个 VirtIO
网卡设备,指定虚拟网卡设备类型为 virtio-net-pci
,并将其与前面定义的网络设备 mynic0
关联起来。mac
参数设置 MAC
地址为 52:54:98:76:54:32
。
-vnc :10:开启 VNC
服务,允许远程访问虚拟机的图形界面。VNC
服务将在本地的 5910
端口上监听。
-serial stdio:开启串行控制台,允许通过终端与虚拟机交互。
-machine usb=on -device usb-tablet:usb=on
表示启用 USB
支持。-device usb-tablet
表示添加一个 USB
平板设备,使得可以通过 USB
接口与虚拟机交互。在qemu
里面使用 kvm
,在 vnc
终端里面鼠标会错位(真实鼠标在外,虚拟鼠标在 vnc
内部,需要不断调整角度)。这两个参数主要为了解决在使用 vnc
连接虚拟机时鼠标不同步(错位)的问题。
上面命令执行后,会弹出图形安装界面,可根据图形界面引导进行操作系统安装,操作系统安装完成后,在图形安装界面,点击重启系统,重新启动虚拟机,同时可以在宿主机命令行中按 Ctrl C
终结上面的 qemu-system-x86_64
命令行创建流程,重新运行启动虚拟机命令。
安装完成后重起虚拟机便会从硬盘启动,之后再启动虚拟机只需要执行:
qemu-system-x86_64 -name CentOS-8.5-VM -smp 4 -m 4096 -enable-kvm -hda /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2 -netdev user,id=mynic0,hostfwd=tcp::1234-:22 -device virtio-net-pci,netdev=mynic0,mac=52:54:98:76:54:32 -vnc :10
qemu-system-x86_64
命令用来启动一个虚拟机,并配置了一些基本的参数。这个命令的各个参数意义如下:
-name CentOS-8.5-VM: 为虚拟机命名,这样可以在日志和其他管理工具中更容易识别虚拟机。
-smp 4 :设置虚拟机拥有 4
个虚拟 CPU
(SMP
,Symmetric Multi-Processing
)。
-m 4096:设置虚拟机拥有 4096MB
(即 4GB
)的内存。
-enable-kvm:启用 KVM
加速功能,提高虚拟化性能。KVM
是 Linux
内核的一个模块,提供了硬件加速的虚拟化功能。
-hda /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2:指定虚拟机的硬盘映像文件 /home/tmp/image/vmImages/CentOS-8.5-VM/CentOS-8.5-VM.qcow2
,并将其作为第一个硬盘(hda
)加载。
-netdev user,id=mynic0,hostfwd=tcp::1234-:22: 设置网络设备为用户模式网络 (user
),并使用 ID mynic0
。同时,设置端口转发规则,允许外部主机通过本地的 1234
端口访问虚拟机的 SSH
服务(默认端口 22
)。
注意:
user
指config user mode host network backend
,hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport
-device virtio-net-pci,netdev=mynic0,mac=52:54:98:76:54:32: 指定虚拟网卡设备类型为 virtio-net-pci
,使用前面定义的 netdev=mynic0
网络设备,并设置 MAC
地址为 52:54:98:76:54:32
。
【拓展:QEMU 的网络配置】
要理解
QEMU
的网络配置实现由两个部分组成:
提供给虚拟机的虚拟网卡( virtual network device
)比如经典的e1000,rtl8139
以及virtio-net-pci
等,是虚拟机内部看到的设备。与虚拟网卡交互的后端( network backend
)虚拟机往虚拟网卡写入的数据都会由network backend
流出到真实的网络环境中。
QEMU
网络配置需要组合使用-device DEVNAME,netdev=NAME
与-netdev TYPE,id=NAME,...
命令,-device
用于配置虚拟网卡,-netdev
用于配置网络后端,device
中的netdev
的值与netdev
中的id
的值相同,一起配合用于组成一组网络配置,一台虚拟机可以配置多个网络。
【拓展:
QEMU
配置网络环境通常有 2 种方式】
可插拔网卡( pluggable NIC
)-device DEVNAME,netdev=NET-ID,... \
-netdev TYPE,id=NET-ID,...注意:
qemu-system-x86_64 -device help
可以查看机器支持的设备(包含网卡设备)
板载网卡( On-board NIC
)-nic TYPE,model=DEVNAME,...
注意:
qemu-system-x86_64 -nic model=help
可以查看机器支持的NIC
设备。
注意:如果在命令行(通过 -net(已废弃)、-nic 或 -netdev)指定任何网络选项,那么 QEMU 将要求您提供足以定义和连接这两个部分的选项。(忘记指定网络后端或网络虚拟设备会给出警告信息,如“Warning: netdev mynet0 has no peer”,“Warning: hub 0 is not connected to host network”或者“Warning: hub 0 with no nics”,然后
VM
将启动,但是没有正常运行的网络) 注意:如果您使用(默认)SLiRP
用户网络,则ping
(ICMP
)将不起作用,但TCP
和UDP
将起作用。不要尝试使用ping
来测试您的QEMU
网络配置。
VNC
服务,允许远程访问虚拟机的图形界面。VNC
服务将在本地的 5910
端口上监听。启动虚拟机后,常用登录虚拟机可以通过如下 2
种方式:
使用 SSH
登录虚拟机
VNC
登录虚拟机
具体采用哪种方式取决于你的虚拟机的配置和需求。
如果你的虚拟机已经配置了网络,并且安装了 SSH
服务,那么最常用的方法就是通过 SSH
登录。配置方法如下:
配置虚拟机的网络接口为桥接模式(Bridged
)或 NAT
模式(NAT
),以便虚拟机能够访问网络。
在虚拟机内部安装 SSH
服务(如 OpenSSH
):
基于 Red Hat
的系统
sudo dnf install openssh-server
Ubuntu
系统
sudo apt update && sudo apt install openssh-server
设置 SSH
自启动配置命令如下:
sudo systemctl start ssh
sudo systemctl enable ssh
查看虚拟机中 SSH
的状态,命令如下:
sudo systemctl status ssh
在宿主机上使用 SSH
客户端连接虚拟机:
ssh user@virtual_machine_hostname
如果你更改了 SSH
端口,需要加上 -p
参数指定端口号:
ssh -p host_port user@virtual_machine_hostname
其中,host_port
是宿主机的端口号,即前面启动虚拟机时,-netdev user,id=mynic0,hostfwd=tcp::1234-:22
命令中的 1234
端口号。
让我们通过 ssh
登录虚拟机演示一下,这里通过如下命令:
ssh -p 1234 root@localhost
前面创建虚拟机时,设置了宿主机 1234
端口映射到虚拟机的 22
端口,因此,可通过 -p
指定宿主机的 1234
端口转发到虚拟机的 22
端口,root
是登录虚拟机使用的用户名,localhost
是安装虚拟机时设置的虚拟机主机名。结果如下:
dmidecode
可以显示有关系统硬件的详细信息,包括制造商信息。虚拟机通常会在制造商信息中显示虚拟化平台的名称。如果输出类似于 QEMU、VMware, Inc.
或 innotek GmbH(VirtualBox)
,则说明该系统运行在虚拟机上。如果输出的是一个实际的硬件制造商名称,如 Dell Inc.
或 Lenovo
,则说明该系统运行在物理机上。
VNC(Virtual Network Computing)
是一种允许你通过网络远程控制另一台计算机桌面的技术。VNC
主要由两部分组成:VNC
服务器(Server
)和 VNC
客户端(Client
)。VNC
服务器运行在被控制的计算机上,而 VNC
客户端则运行在远程控制计算机上。
QEMU
本身支持 VNC
功能,这意味着你可以直接通过 QEMU
的命令行参数启动虚拟机,并启用 VNC
服务器功能。这样就不需要在虚拟机内部单独安装 VNC
服务器软件。要在 QEMU
创建的虚拟机内启用 VNC
功能,使用 QEMU
的 -vnc
选项启动虚拟机,并指定 VNC
端口:-vnc :10
。但宿主机则需要安装 VNC
客户端,从而连接虚拟机中的 VNC
服务端。宿主机上 VNC
客户端安装命令如下:
yum install tigervnc -y
在宿主机上使用 VNC
客户端连接虚拟机:
vncviewer :10
为了加快虚拟机中软件包的下载速度,可以修改 CentOS
的仓库配置,使用国内的镜像源。
编辑 /etc/yum.repos.d/CentOS-AppStream.repo
文件:
[AppStream]
name=CentOS-$releasever - AppStream
baseurl=http://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
编辑 /etc/yum.repos.d/CentOS-Linux-BaseOS.repo
文件:
[baseos]
name=CentOS Linux $releasever - BaseOS
baseurl=http://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
编辑 /etc/yum.repos.d/CentOS-Linux-Extras.repo
文件:
[extras]
name=CentOS Linux $releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
在虚拟机中安装一些常用的开发工具和库:
yum install autoconf automake python3 libmpc-devel mpfr-devel gmp-devel gawk bison flex patchutils gcc gcc-c++ zlib-devel expat-devel libslirp-devel -y
下载工具链源码:
git clone https://mirrors.tuna.tsinghua.edu.cn/git/binutils-gdb.git
git clone https://mirrors.tuna.tsinghua.edu.cn/git/gcc.git
安装依赖:
yum groupinstall "Development Tools" -y
yum install gmp-devel mpfr-devel libmpc-devel -y
【拓展】
yum groupinstall "Development Tools"
是一个命令,用于在基于Red Hat
的系统(如CentOS、Fedora、Red Hat Enterprise Linux
)上安装一组常用的开发工具。该命令解析如下:
yum(Yellowdog Updater Modified) 是一个包管理器,用于安装、更新和卸载软件包。它可以根据依赖关系自动解决软件包之间的依赖关系。
groupinstall 命令用于安装预定义的软件包组。每个组都包含一组相关的软件包,这些软件包通常是为了解决特定的任务或满足某种用途而组合在一起的。
"Development Tools" 是一个预定义的软件包组,包含了开发人员在编写、编译和调试程序时需要的各种工具。这些工具通常包括编译器、链接器、调试工具等。
"Development Tools" 软件包组中的这些工具通常包括编译器、链接器、调试工具以及其他与软件开发相关的工具。通常包括但不限于:
编译器:如
gcc
和g++
(GNU
编译器集合的一部分)。链接器:如
ld
(GNU
链接器)。调试工具:如
gdb
(GNU
调试器)。库文件:如
libstdc++
(C++
标准库)。文本编辑器:如
vim
或nano
。构建工具:如
make
和autotools
(autoconf, automake, libtool
)。包管理工具:如
rpm-build
。这些工具是软件开发的基本组成部分,对于编写、编译、调试和打包应用程序非常重要。
编译 binutils-gdb
工具:
cd binutils-gdb/
./configure --enable-gold
# 使用所有可用的 CPU 核心进行并行编译,加快编译速度。
make -j$(nproc)
# 以 root 权限安装编译好的 binutils
make install
其中,configure
选项的含义如下:
binutils-gdb
时启用 gold
链接器的支持。gold
是 GNU
链接器的一个替代品,设计用于提供更好的性能和额外的功能。安装好上述工具后,可在 /usr/local/bin/
路径下看到日常开发中常用的二进制工具,如下:
[root@localhost repo]# ls /usr/local/bin
addr2line cpp gcc-ar gcov-dump gp-archive gprof ld.bfd objcopy readelf texi2dvi x86_64-pc-linux-gnu-gcc
ar dwp gcc-nm gcov-tool gp-collect-app gprofng ld.gold objdump size texi2pdf x86_64-pc-linux-gnu-gcc-15.0.0
as elfedit gcc-ranlib gdb gp-display-html help2man lto-dump pdftexi2dvi strings texindex x86_64-pc-linux-gnu-gcc-ar
c++ g++ gcore gdb-add-index gp-display-src install-info makeinfo pod2texi strip x86_64-pc-linux-gnu-c++ x86_64-pc-linux-gnu-gcc-nm
c++filt gcc gcov gdbserver gp-display-text ld nm ranlib texi2any x86_64-pc-linux-gnu-g++ x86_64-pc-linux-gnu-gcc-ranlib
运行其中一个工具试验一下:
[root@localhost repo]# addr2line --help
Usage: addr2line [option(s)] [addr(s)]
Convert addresses into line number/file name pairs.
If no addresses are specified on the command line, they will be read from stdin
The options are:
@ Read options from
-a --addresses Show addresses
-b --target= Set the binary file format
-e --exe= Set the input file name (default is a.out)
-i --inlines Unwind inlined functions
-j --section= Read section-relative offsets instead of addresses
-p --pretty-print Make the output easier to read for humans
-s --basenames Strip directory names
-f --functions Show function names
-C --demangle[=style] Demangle function names
-R --recurse-limit Enable a limit on recursion whilst demangling. [Default]
-r --no-recurse-limit Disable a limit on recursion whilst demangling
-h --help Display this information
-v --version Display the program's version
addr2line: supported targets: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 pei-i386 pe-x86-64 pei-x86-64 elf64-little elf64-big elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex plugin
Report bugs to
可以正常使用,但是当运行 gdb
时,却报如下错误:
[root@localhost repo]# gdb --help
gdb: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by gdb)
gdb: /lib64/libstdc++.so.6: version `CXXABI_1.3.15' not found (required by gdb)
gdb: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by gdb)
gdb: /lib64/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by gdb)
上述错误信息表明 gdb
依赖的 libstdc++.so.6
库版本不满足要求。具体来说,gdb
需要的 GLIBCXX_3.4.30
和 CXXABI_1.3.15
版本在你的系统中找不到。这通常是因为你的系统中的 libstdc++
库版本过旧。 为解决该问题,特进行如下操作:
# 更新 libstdc++ 库
yum update
yum install libstdc++-devel
# 验证安装
strings /usr/local/lib64/libstdc++.so.6 | grep GLIBCXX
strings /usr/local/lib64/libstdc++.so.6 | grep CXXABI
# 设置库路径到 .bashrc 文件中,以便每次登录时自动设置
vi ~/.bashrc
# 在文件最后添加如下行:
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
进行如上操作后,即可解决 gdb
因为 libstdc++
库版本不匹配而无法运行的问题。如果系统提供的库版本过旧,可以从源代码编译安装较新版本的 libstdc++
库。
编译 gcc
工具:
mkdir build
cd build
../configure --enable-languages=c,c++ --disable-multilib
# 使用所有可用的 CPU 核心进行并行编译,加快编译速度。
make -j$(nproc)
# 以 root 权限安装编译好的 GCC
make install
其中,configure
选项的含义如下:
--enable-languages=c,c++:启用 C
和 C++
语言支持。
--disable-multilib:禁用多库支持,减少编译时间。
安装完成后,验证 gcc/g++
是否正确安装:
[root@localhost ~]# gcc --version
gcc (GCC) 15.0.0 20241023 (experimental)
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@localhost ~]# g++ --version
g++ (GCC) 15.0.0 20241023 (experimental)
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
你应该看到类似如上的输出,说明 gcc/g++
已成功安装。通过以上步骤,你可以下载并安装 g++ 15.0.0
版本。
通过以上步骤,你已经成功地在 Linux
平台上从源码编译 QEMU
,并创建和配置了一个虚拟机。QEMU
提供了强大的虚拟化功能,结合 KVM
可以显著提高虚拟机的性能。希望这篇博文对你有所帮助!