我想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 之前和之后:
答案1
出现问题的迹象是
libPrlDRI.so.1 => /lib/x86_64-linux-gnu/libPrlDRI.so.1 (0x00007f0d0b581000)
输出中的一行ldd
:Debian 中没有这样的库,因此需要它的库不能来自 Debian 软件包。
如果libvirglrenderer.so.0
库不是Debian提供的版本,
sudo apt install --reinstall libvirglrenderer0
会解决这个问题;但显然这不是这里的问题。
libPrlDRI.so.1
来自并行工具;提供了许多替换库:libEGL.so.1
、libgbm.so.1
、 和libGL.so.1
,以及两个 Parallels 特定库libPrlDRI.so.1
和libPrlWl.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 ...