Debian

如何修復“qemu-system-x86_64:符號查找錯誤:/lib/x86_64-linux-gnu/libvirglrenderer.so.0:未定義符號:drmPrimeHandleToFD”?

  • May 31, 2021

我想qemu在 Debian Buster 上執行,因此安裝了該qemu-system-x86_64軟體包。

問題是當我執行時:

qemu-system-x86_64 \
   -m 128M \
   -cpu kvm64,+smep,+smap \
   -kernel vmlinuz \
   -initrd initramfs.cpio.gz \
   -hdb flag.txt \
   -snapshot \
   -nographic \
   -monitor /dev/null \
   -no-reboot \
   -append "console=ttyS0 kaslr kpti=1 quiet panic=1" \

我收到以下錯誤:

qemu-system-x86_64: symbol lookup error: /lib/x86_64-linux-gnu/libvirglrenderer.so.0: undefined symbol: drmPrimeHandleToFD

我該如何解決這個錯誤?

據 說apt,我有 的最新版本,libvirglrenderer0但沒有可用的版本debian-backports

版本:

qemu-system-x86/stable,stable,now 1:3.1+dfsg-8+deb10u8 amd64 [installed]
libvirglrenderer0/stable,now 0.7.0-2 amd64 [installed]

德比安:

uname -a
Linux debian-parallels 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux

更新:

$ nm -D  /lib/x86_64-linux-gnu/libvirglrenderer.so.0 | grep drm
                U drmPrimeHandleToFD
$ ldd  /lib/x86_64-linux-gnu/libvirglrenderer.so.0
   linux-vdso.so.1 (0x00007ffedad5f000)
   libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0d0bed8000)
   libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007f0d0bcd3000)
   libepoxy.so.0 => /lib/x86_64-linux-gnu/libepoxy.so.0 (0x00007f0d0bba1000)
   libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f0d0ba60000)
   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0d0ba3f000)
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d0b87e000)
   /lib64/ld-linux-x86-64.so.2 (0x00007f0d0c0ee000)
   libPrlDRI.so.1 => /lib/x86_64-linux-gnu/libPrlDRI.so.1 (0x00007f0d0b581000)
   libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0d0b3fd000)
   libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0d0b3e3000)
   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d0b3de000)
   libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f0d0b3b4000)
   libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f0d0b1ae000)
   libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f0d0afa8000)
   libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f0d0af8e000)
   librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f0d0af84000)

更新1:

安裝 Parallels Tools 之前和之後

在此處輸入圖像描述

出現問題的跡像是

libPrlDRI.so.1 => /lib/x86_64-linux-gnu/libPrlDRI.so.1 (0x00007f0d0b581000)

line inldd的輸出:Debian 中沒有這樣的庫,因此需要它的庫不能來自 Debian 軟體包。

如果libvirglrenderer.so.0庫不是 Debian 提供的版本,

sudo apt install --reinstall libvirglrenderer0

會解決這個問題;但顯然這不是這裡的問題。

libPrlDRI.so.1來自並行工具;它附帶了許多替換庫:libEGL.so.1libgbm.so.1libGL.so.1,以及兩個特定於 Parallels 的庫libPrlDRI.so.1libPrlWl.so.1. 這裡的罪魁禍首可能是libgbm.so.1:QEMU 需要該庫,並且如果它載入 Parallels 的版本(通過LD_LIBRARY_PATH或更新ld.so配置),它最終會載入libPrlDRI.so.1 不是libdrm.so.2.

要解決這個問題,您應該能夠覆蓋覆蓋:

LD_PRELOAD=/lib/x86_64-linux-gnu/libdrm.so.2 qemu-system-x86_64 ...

引用自:https://unix.stackexchange.com/questions/651806