Ubuntu 18.4 libQt5Core.so.5:无法打开共享对象文件:没有这样的文件或目录

job*_*cxa 26 virtualbox qt5 18.04

我有 Ubuntu 18.04。

启动虚拟框时出现错误

$ virtualbox
VirtualBox: supR3HardenedMainGetTrustedMain: dlopen("/usr/lib/virtualbox/VirtualBox.so",) failed: libQt5Core.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
$ ldd /usr/lib/virtualbox/VirtualBox.so | grep Qt
libQt5X11Extras.so.5 => /usr/lib/x86_64-linux-gnu/libQt5X11Extras.so.5 (0x00007f7dcec8e000)
libQt5Core.so.5 => not found
libQt5Gui.so.5 => not found
libQt5Widgets.so.5 => not found
libQt5PrintSupport.so.5 => /usr/lib/x86_64-linux-gnu/libQt5PrintSupport.so.5 (0x00007f7dcea1f000)
libQt5OpenGL.so.5 => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5 (0x00007f7dce7c8000)
libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found
libQt5Widgets.so.5 => not found
libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found
libQt5Widgets.so.5 => not found
libQt5Gui.so.5 => not found
libQt5Core.so.5 => not found
Run Code Online (Sandbox Code Playgroud)
$ apt-file search libQt5Gui.so.5
libqt5gui5: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
libqt5gui5: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.9
libqt5gui5: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.9.5
Run Code Online (Sandbox Code Playgroud)

系统有 libqt5* 包,但我无法列出其中的一些使用

$ ls /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
ls: cannot access '/usr/lib/x86_64-linux-gnu/libQt5Gui.so.5': No such file or directory
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

小智 45

对我来说,这个libqt5gui5包已经安装好了。我尝试像在另一个答案中一样重新安装,但仍然出现错误:

...
ImportError: libQt5Core.so.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我在https://github.com/dnschneid/crouton/wiki/Fix-error-while-loading-shared-libraries:-libQt5Core.so.5发现了类似的问题

内核需要至少为 3.15,这是一个非常真实但(对我而言)深奥的原因:“Qt 5.10 使用 renameat2 系统调用,它仅在内核 3.15 之后可用”。如果您想阅读很长的主题,请看这里:

https://bbs.archlinux.org/viewtopic.php?id=232682

...

sudo strip --remove-section=.note.ABI-tag /usr/lib64/libQt5Core.so.5
Run Code Online (Sandbox Code Playgroud)

上面的命令“剥离”了一段代码,它在内核中寻找不存在的东西,并允许加载模块。

我实际上正在运行 Debian 测试 (bullseye) 3.12-1-amd64。我的图书馆的路径是/usr/lib/x86_64-linux-gnu/libQt5DBus.so.5我的情况下的命令是

strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
Run Code Online (Sandbox Code Playgroud)

在那之后,我能够让应用程序(Electrum)工作

  • 这甚至适用于使用内核 4.4.0 运行 Debian Bullseye 的 WSL (12认同)
  • 我不得不在 Ubuntu 20.x 上使用 `sudo` 命令运行它,它的效果非常好。 (6认同)
  • 是的,`strip` 在 WSL 中完成了工作。我使用 Calibre 将 epub 转换为 mobi 并解决了问题...请参阅官方报告:https://github.com/microsoft/WSL/issues/3023 (3认同)

ubf*_*an1 8

对于所有“未找到”的库,请像使用 apt 文件搜索 libQt5Gui.so.5 一样识别它们的包。然后使用 sudo apt-get install 安装软件包,例如:

sudo apt-get install libqt5gui5
Run Code Online (Sandbox Code Playgroud)

包的安装应将库放在正确的位置,以便找到它们。


如果文件不存在,要么它们安装在错误的位置(手动强制某处),它们是错误的架构(i386 而不是 amd64,所以会在 /usr/lib/i386-linux-gnu 中),或者安装未正常运行(使用以下命令检查包的状态:

dpkg -l | grep libqt5  
Run Code Online (Sandbox Code Playgroud)

正确安装的软件包将具有状态“ii”。

如果文件位于系统上的其他位置,您可以使用 locate 命令来查找文件,但如果您安装了它们,则这种可能性不大。