成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一步一步教你:如何在 Linux 上用 QEMU 搭建虛擬機

系統(tǒng) Linux
QEMU(Quick Emulator)是一個強大的開源虛擬化工具,可以模擬整個計算機系統(tǒng),包括?CPU、內存、硬盤、網卡等。結合?KVM(Kernel-based Virtual Machine),QEMU?可以提供高效的虛擬化性能。

QEMU 是一個強大的開源硬件虛擬化軟件,可以在多種操作系統(tǒng)上運行。本文將詳細介紹如何在 Linux 平臺上從源碼編譯 QEMU,并創(chuàng)建和配置一個虛擬機。我們將使用 CentOS 8.5 作為示例操作系統(tǒng),但部分步驟同樣適用于其他操作系統(tǒng)(如 Ubuntu)。

1. 簡介

QEMU(Quick Emulator)是一個強大的開源虛擬化工具,可以模擬整個計算機系統(tǒng),包括 CPU、內存、硬盤、網卡等。結合 KVM(Kernel-based Virtual Machine),QEMU 可以提供高效的虛擬化性能。

2. 安裝依賴

在開始之前,確保你的系統(tǒng)已經安裝了必要的依賴項。以下命令適用于基于 Red Hat 的系統(tǒng)(如 CentOS 和 Fedora):

sudo dnf install pixman-devel -y

3. 源碼編譯 QEMU

  1. 下載 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
  1. 安裝編譯依賴:
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
  1. 安裝 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
  1. 編譯和安裝 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 的網絡后端實現(xiàn),該網絡后端的實現(xiàn)是在用戶態(tài)實現(xiàn)的一套 tcp/ip 協(xié)議棧。

整個命令的作用就是配置 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 可執(zhí)行文件所在環(huán)境的 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 的問題。如果問題仍然存在,請進一步檢查其他配置或環(huán)境問題。

4. 創(chuàng)建虛擬機鏡像

使用 qemu-img 工具創(chuàng)建一個新的磁盤鏡像文件。這里我們創(chuàng)建一個 100 GB 的 qcow2 格式的磁盤鏡像。

qemu-img create -f qcow2 CentOS-8.5-VM.qcow2 100G

5. 創(chuàng)建虛擬機

qemu-system-x86_64 是一個基于 QEMU 的命令行工具,用于模擬 x86 架構的計算機系統(tǒng)。假設您要在虛擬機中安裝 x86 架構操作系統(tǒng),可以使用 qemu-system-x86_64 命令創(chuàng)建虛擬機并安裝操作系統(tǒng),這里假設你已經下載了 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 命令用來創(chuàng)建一個虛擬機,并配置了一些基本的參數(shù)。這個命令的各個參數(shù)意義如下:

  • qemu-system-x86_64: QEMU 的二進制文件名,這里表示運行 x86_64 架構的系統(tǒng)級模擬器。
  • -name CentOS-8.5-VM:為虛擬機命名,雖然這不是一個必需的參數(shù),但它可以用于標識虛擬機,便于日志記錄或管理。
  • -smp n [,cores=cores][,threads=threads][,sockets=sockets] [,maxcpus=maxcpus]:設置客戶機總共有 n 個邏輯 CPU,并設置了其中 CPU socket 的數(shù)量、每個 socket 上核心(core)的數(shù)量、每個核心上的線程(thread)數(shù)量。其中:n = sockets x cores x threads。
  • n:虛擬CPU(vcpu)的個數(shù),每個 thread 都視為一個虛擬 CPU 。
  • cores:每個 CPU 擁有的 CPU 核心數(shù)目
  • threads:每個 CPU 核心擁有的線程數(shù)目。
  • sockets :CPU 插槽數(shù)目,也就是 CPU 的個數(shù)。
  • maxcpus: 根據(jù)文檔,是設置可熱插拔的 CPU 數(shù)量,經測試,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, 端口轉發(fā)配置格式為: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 關聯(lián)起來。mac 參數(shù)設置 MAC 地址為 52:54:98:76:54:32。
  • -vnc :10:開啟 VNC 服務,允許遠程訪問虛擬機的圖形界面。VNC 服務將在本地的 5910 端口上監(jiān)聽。
  • -serial stdio:開啟串行控制臺,允許通過終端與虛擬機交互。
  • -machine usb=on -device usb-tablet:usb=on 表示啟用 USB 支持。-device usb-tablet 表示添加一個 USB 平板設備,使得可以通過 USB 接口與虛擬機交互。在qemu 里面使用 kvm,在 vnc 終端里面鼠標會錯位(真實鼠標在外,虛擬鼠標在 vnc 內部,需要不斷調整角度)。這兩個參數(shù)主要為了解決在使用 vnc 連接虛擬機時鼠標不同步(錯位)的問題。

上面命令執(zhí)行后,會彈出圖形安裝界面,可根據(jù)圖形界面引導進行操作系統(tǒng)安裝,操作系統(tǒng)安裝完成后,在圖形安裝界面,點擊重啟系統(tǒng),重新啟動虛擬機,同時可以在宿主機命令行中按 Ctrl C 終結上面的 qemu-system-x86_64 命令行創(chuàng)建流程,重新運行啟動虛擬機命令。

6. 啟動虛擬機

安裝完成后重起虛擬機便會從硬盤啟動,之后再啟動虛擬機只需要執(zhí)行:

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 命令用來啟動一個虛擬機,并配置了一些基本的參數(shù)。這個命令的各個參數(shù)意義如下:

  • -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。同時,設置端口轉發(fā)規(guī)則,允許外部主機通過本地的 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 的網絡配置實現(xiàn)由兩個部分組成:

  • 提供給虛擬機的虛擬網卡(virtual network device)比如經典的 e1000,rtl8139 以及 virtio-net-pci 等,是虛擬機內部看到的設備。
  • 與虛擬網卡交互的后端(network backend)虛擬機往虛擬網卡寫入的數(shù)據(jù)都會由 network backend 流出到真實的網絡環(huán)境中。

QEMU 網絡配置需要組合使用  -device DEVNAME,netdev=NAME 與 -netdev TYPE,id=NAME,... 命令,-device 用于配置虛擬網卡,-netdev 用于配置網絡后端, device 中的 netdev 的值與 netdev 中的 id 的值相同,一起配合用于組成一組網絡配置,一臺虛擬機可以配置多個網絡。

【拓展:QEMU 配置網絡環(huán)境通常有 2 種方式】

  1. 可插拔網卡(pluggable NIC)

-device DEVNAME,netdev=NET-ID,... \-netdev TYPE,id=NET-ID,...

注意:qemu-system-x86_64 -device help 可以查看機器支持的設備(包含網卡設備)

  1. 板載網卡(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 :10:開啟 VNC 服務,允許遠程訪問虛擬機的圖形界面。VNC 服務將在本地的 5910 端口上監(jiān)聽。

7. 登錄虛擬機

啟動虛擬機后,常用登錄虛擬機可以通過如下 2 種方式:

  1. 使用 SSH 登錄虛擬機
  2. VNC 登錄虛擬機

具體采用哪種方式取決于你的虛擬機的配置和需求。

1. 使用 SSH 登錄虛擬機

如果你的虛擬機已經配置了網絡,并且安裝了 SSH 服務,那么最常用的方法就是通過 SSH 登錄。配置方法如下:

1)確保虛擬機有網絡連接

配置虛擬機的網絡接口為橋接模式(Bridged)或 NAT 模式(NAT),以便虛擬機能夠訪問網絡。

2)安裝 SSH 服務

在虛擬機內部安裝 SSH 服務(如 OpenSSH):

  • 基于 Red Hat 的系統(tǒng)
sudo dnf install openssh-server
  • Ubuntu 系統(tǒng)
sudo apt update && sudo apt install openssh-server

3)啟動并設置 SSH 自啟動

設置 SSH 自啟動配置命令如下:

sudo systemctl start ssh
sudo systemctl enable ssh

4)檢查 SSH 服務狀態(tài)

查看虛擬機中 SSH 的狀態(tài),命令如下:

sudo systemctl status ssh

5)通過 SSH 登錄

在宿主機上使用 SSH 客戶端連接虛擬機:

ssh user@virtual_machine_hostname

如果你更改了 SSH 端口,需要加上 -p 參數(shù)指定端口號:

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

前面創(chuàng)建虛擬機時,設置了宿主機 1234 端口映射到虛擬機的 22 端口,因此,可通過 -p 指定宿主機的 1234 端口轉發(fā)到虛擬機的 22 端口,root 是登錄虛擬機使用的用戶名,localhost 是安裝虛擬機時設置的虛擬機主機名。結果如下:

dmidecode 可以顯示有關系統(tǒng)硬件的詳細信息,包括制造商信息。虛擬機通常會在制造商信息中顯示虛擬化平臺的名稱。如果輸出類似于 QEMU、VMware, Inc. 或 innotek GmbH(VirtualBox),則說明該系統(tǒng)運行在虛擬機上。如果輸出的是一個實際的硬件制造商名稱,如 Dell Inc. 或 Lenovo,則說明該系統(tǒng)運行在物理機上。

2. 使用 VNC 登錄虛擬機

VNC(Virtual Network Computing) 是一種允許你通過網絡遠程控制另一臺計算機桌面的技術。VNC 主要由兩部分組成:VNC 服務器(Server)和 VNC 客戶端(Client)。VNC 服務器運行在被控制的計算機上,而 VNC 客戶端則運行在遠程控制計算機上。

QEMU 本身支持 VNC 功能,這意味著你可以直接通過 QEMU 的命令行參數(shù)啟動虛擬機,并啟用 VNC 服務器功能。這樣就不需要在虛擬機內部單獨安裝 VNC 服務器軟件。要在 QEMU 創(chuàng)建的虛擬機內啟用 VNC 功能,使用 QEMU 的 -vnc 選項啟動虛擬機,并指定 VNC 端口:-vnc :10 。但宿主機則需要安裝 VNC 客戶端,從而連接虛擬機中的 VNC 服務端。宿主機上 VNC 客戶端安裝命令如下:

yum install tigervnc -y

在宿主機上使用 VNC 客戶端連接虛擬機:

vncviewer :10

8. 虛擬機的倉庫配置

為了加快虛擬機中軟件包的下載速度,可以修改 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

9. 常用工具安裝

在虛擬機中安裝一些常用的開發(fā)工具和庫:

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

10. 虛擬機GNU工具鏈

下載工具鏈源碼:

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 的系統(tǒng)(如 CentOS、Fedora、Red Hat Enterprise Linux)上安裝一組常用的開發(fā)工具。該命令解析如下:

  1. yum(Yellowdog Updater Modified) 是一個包管理器,用于安裝、更新和卸載軟件包。它可以根據(jù)依賴關系自動解決軟件包之間的依賴關系。
  2. groupinstall 命令用于安裝預定義的軟件包組。每個組都包含一組相關的軟件包,這些軟件包通常是為了解決特定的任務或滿足某種用途而組合在一起的。
  3. "Development Tools" 是一個預定義的軟件包組,包含了開發(fā)人員在編寫、編譯和調試程序時需要的各種工具。這些工具通常包括編譯器、鏈接器、調試工具等。

"Development Tools" 軟件包組中的這些工具通常包括編譯器、鏈接器、調試工具以及其他與軟件開發(fā)相關的工具。通常包括但不限于:

  • 編譯器:如 gcc 和 g++(GNU 編譯器集合的一部分)。
  • 鏈接器:如 ld(GNU 鏈接器)。
  • 調試工具:如 gdb(GNU 調試器)。
  • 庫文件:如 libstdc++(C++ 標準庫)。
  • 文本編輯器:如 vim 或 nano。
  • 構建工具:如 make 和 autotools(autoconf, automake, libtool)。
  • 包管理工具:如 rpm-build。

這些工具是軟件開發(fā)的基本組成部分,對于編寫、編譯、調試和打包應用程序非常重要。

編譯 binutils-gdb 工具:

cd binutils-gdb/
./configure  --enable-gold
# 使用所有可用的 CPU 核心進行并行編譯,加快編譯速度。
make -j$(nproc)
# 以 root 權限安裝編譯好的 binutils
make install

其中,configure 選項的含義如下:

  • --enable-gold:選項用于在編譯 binutils-gdb 時啟用 gold 鏈接器的支持。gold 是 GNU 鏈接器的一個替代品,設計用于提供更好的性能和額外的功能。

安裝好上述工具后,可在 /usr/local/bin/ 路徑下看到日常開發(fā)中常用的二進制工具,如下:

[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:
  @<file>                Read options from <file>
  -a --addresses         Show addresses
  -b --target=<bfdname>  Set the binary file format
  -e --exe=<executable>  Set the input file name (default is a.out)
  -i --inlines           Unwind inlined functions
  -j --section=<name>    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 <https://sourceware.org/bugzilla/>

可以正常使用,但是當運行 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 版本在你的系統(tǒng)中找不到。這通常是因為你的系統(tǒng)中的 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++ 庫版本不匹配而無法運行的問題。如果系統(tǒng)提供的庫版本過舊,可以從源代碼編譯安裝較新版本的 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 版本。

11. 總結

通過以上步驟,你已經成功地在 Linux 平臺上從源碼編譯 QEMU,并創(chuàng)建和配置了一個虛擬機。QEMU 提供了強大的虛擬化功能,結合 KVM 可以顯著提高虛擬機的性能。

責任編輯:武曉燕 來源: Linux二進制
相關推薦

2009-07-06 19:29:37

云計算私有云服務器虛擬化

2018-03-07 15:24:41

PythonMySQL

2010-04-07 13:05:57

2024-07-22 11:43:28

LVMPnetLab網絡

2017-12-25 11:50:57

LinuxArch Linux

2025-04-08 09:30:00

SeataDocker分布式系統(tǒng)

2020-10-28 15:03:25

C+代碼開發(fā)

2009-12-17 08:57:28

Windows 7磁盤分區(qū)

2022-08-29 15:19:09

CSS煙花動畫

2024-09-13 15:20:46

2024-12-02 14:48:30

Docker鏡像文件

2012-03-22 10:33:33

思杰XenDesktop

2017-09-28 09:40:36

圖像分類準確率

2015-07-30 09:35:24

滑動返回代碼

2011-09-05 12:36:08

路由器限速linux路由器

2017-08-24 08:31:41

2011-06-07 16:03:48

匿名SQL Server

2017-11-29 11:14:52

離線緩存URL協(xié)議緩存

2013-03-18 16:09:27

JavaEEOpenfire

2021-11-12 11:28:01

Linux 內核驅動Linux 系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜免费成人 | 午夜av在线| 精品免费av | 成人在线免费视频观看 | 欧美一区 | 国产精品欧美一区二区三区不卡 | 91玖玖 | 日韩中文字幕 | 国产美女特级嫩嫩嫩bbb片 | 精品三级在线观看 | 在线观看国产网站 | 国产欧美三区 | 国产精品视频在线观看 | 国产日韩精品视频 | 日韩高清中文字幕 | 黄色一级毛片 | 欧美在线一区视频 | 久草视 | 一区二区三区视频在线观看 | 欧美日韩一区在线 | 亚洲国产一区在线 | 国产精品久久久久久久久免费高清 | 国产精品亚洲一区二区三区在线观看 | 久久久久久久久久性 | 久久婷婷色 | 中文字幕一区二区三区乱码在线 | 麻豆成人在线视频 | 免费在线一区二区 | 天天操人人干 | 可以在线看的黄色网址 | 日日干天天干 | 中文字幕11页 | 黄色免费网站在线看 | 天天射网站 | 久久久一二三 | 久久久网 | 日韩欧美天堂 | 丝袜久久| 午夜视频免费网站 | 欧美一二三四成人免费视频 | 色综合久|