我为使用 Qt5 的 linux 编写了应用程序。
但是当我试图在没有安装 Qt SDK 的 linux 上启动它时,控制台中的输出是:
Failed to load platform plugin "xcb". Available platforms are:
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?也许我需要复制一些插件文件?当我在安装了 Qt5 的情况下使用 Ubuntu,但我重命名 Qt 目录时,也会出现同样的问题。所以,它使用了 qt 目录中的一些文件......
我libqxcb.so在 Qt SDK 目录中找到了文件,但将其放入/usr/lib并没有帮助。
小智 64
尝试运行“Stellarium”时出现此错误消息。
使用 strace 我发现丢失的文件是libxcb-xinerama.so.0. 我必须重新安装libxcb-xinerama0才能使其正常工作:
sudo apt-get install --reinstall libxcb-xinerama0
Run Code Online (Sandbox Code Playgroud)
Cas*_*y L 54
对于遇到此问题的任何未来读者 - 在您开始(危险地)弄乱共享库的符号链接之前,我强烈建议您运行
export QT_DEBUG_PLUGINS=1
然后在终端中再次运行失败的可执行文件。阅读 QT 抛出的实际错误消息,因为在我的情况下,上述解决方案都没有解决此错误的原因。
打开后我的输出QT_DEBUG_PLUGINS是:
QFactoryLoader::QFactoryLoader() checking directory path "/opt/PostgreSQL/9.6/pgAdmin 4/bin/platforms" ...
loaded library "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so"
QLibraryPrivate::loadPlugin failed on "/opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so" : "Cannot load library /opt/PostgreSQL/9.6/pgAdmin 4/plugins/platforms/libqxcb.so: (/opt/PostgreSQL/9.6/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))"
This application failed to start because it could not find or load the Qt platform plugin "xcb".
Available platform plugins are: xcb.
Reinstalling the application may fix this problem.
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
所以我然后用谷歌搜索version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))错误并找到了解决方案,从而解决了问题。
小智 17
尝试libqt5x11extras5使用以下命令安装软件包:
sudo apt-get install libqt5x11extras5
名称可能不同。你可以通过搜索来弄清楚:
sudo apt-cache search qt5 | grep 'X11 extras'
你得到包的名称作为结果:
libqt5x11extras5 - Qt 5 X11 附加功能
小智 14
正确的解决方案是在终端上运行以下命令:
sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/
它创建了它错过的符号链接。
小智 6
运行这个解决了我:
sudo apt-get --reinstall install libqt5dbus5 \
libqt5widgets5 libqt5network5 libqt5gui5 libqt5core5a \
libdouble-conversion1 libxcb-xinerama0
Run Code Online (Sandbox Code Playgroud)
小智 5
对于那些在尝试了互联网上的所有其他选项后仍然陷入困境的人,您可以使用以下命令查看搜索这个臭名昭著的文件 的确切路径,以便由应用程序打开/加载(在我的例子中是应用程序)跟踪工具。就我而言,由于我是从其源代码构建的,因此它在以下位置搜索:
而不是在库路径、安装路径等中搜索。因此,所有检查和其他解决方案都不起作用。而且设置也没有产生任何额外的日志。libqxcb.soQtVirtualBox-5.2.8QtVirtualBox-5.2.8libqxcb.so
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/"defaultQtlddQT_DEBUG_PLUGINS=1
在我在 Ubuntu 17.10 x86_64 上使用 Clang/LLVM 构建的 VirtualBox 二进制文件上运行 strace:
...VirtualBox-5.2.8$ strace ./out/linux.amd64/release/bin/VirtualBox
.
.
.
access(".../VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/.", F_OK) = -1 ENOENT (No such file or directory)
write(2, "Qt FATAL: ", 10Qt FATAL: ) = 10
write(2, "This application failed to start"..., 154This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".
Reinstalling the application may fix this problem.) = 154
.
.
.
Run Code Online (Sandbox Code Playgroud)
那是我的hitting-the-nail-on-its-head时刻,我symlink从下面提到的安装目录创建了 :
Qt5.10.1到搜索路径,即. 这样,在Linux( )上使用源码构建,终于启动成功了!platforms"...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/""...VirtualBox-5.2.8/out/linux.amd64/release/bin/"VirtualBox-5.2.8Ubuntu 17.10 x86_64Clang/LLVM
事实上,这里的另一件有趣的事情是,我在经过大量努力后VirtualBox-5.2.8完全使用了Clang/Clang++/LLVM构建- 对于,已经有一个用于构建使用的端口,但对于 Linux,正如我所见,它严重依赖于,因此花了很多努力才得到到目前为止,能够使用on for target ( )从源代码成功构建,并在解决其他问题以及这个臭名昭著的问题后成功启动它。Ubuntu 17.10 x86_64FreeBSDVirtualBoxclangGCCVirtualBox-5.2.8Clang/Clang++/LLVMUbuntu 17.10 x86_64Linux/AMD64Ubuntu 17.10 x86_64libqxcb.so
干杯。
在应用程序可执行文件上运行 ldd 以查看它如何解决库依赖关系。
此外,为了了解简单的 gui 应用程序需要哪些基本库,这是必须阅读的内容:
http://qt-project.org/doc/qt-5/linux-deployment.html