“在没有安装qt的Linux上启动qt5应用程序时,无法加载平台插件”xcb“”

我编写了使用Qt5的linux应用程序。

但是当我尝试在没有安装Qt SDK的Linux上启动它时,控制台中的输出是:

Failed to load platform plugin "xcb". Available platforms are: 

我怎样才能解决这个问题? 也许我需要复制一些插件文件? 当我使用安装了Qt5的Ubuntu,但是我重命名Qt目录时,会出现同样的问题。 所以,它使用qt目录中的一些文件…

我在Qt SDK目录中找到了文件libqxcb.so ,但将它放在/usr/lib中没有帮助。

正确的解决方案是在终端上运行以下命令:

sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/

它创造了它错过的符号链接。

在应用程序可执行文件上运行ldd,以查看它如何解析库依赖项。

这也是必须阅读,以了解在gui应用的简单情况下需要什么基本库:

http://qt-project.org/doc/qt-5/linux-deployment.html

在我的ubuntu类型中:

 sudo ln -sf /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/ /usr/bin/platforms 

能行得通

尝试使用命令安装libqt5x11extras5包:
sudo apt-get install libqt5x11extras5

名称可能不同。 您可以通过搜索找出它:
sudo apt-cache search qt5 | grep 'X11 extras'

你得到包的名称作为结果:

libqt5x11extras5 – Qt 5 X11附加function

尝试运行“Stellarium”时出现此错误消息。

有了strace,我发现丢失的文件是libxcb-xinerama.so.0 。 我不得不重新安装libxcb-xinerama0才能使它工作:

 sudo apt-get install --reinstall libxcb-xinerama0 

对于那些在互联网上尝试其他选项之后仍然卡住的人,你可以查看正在搜索这个臭名昭着的 libqxcb.so确切路径,以便通过Qt App打开/加载( VirtualBox-5.2.8是在我的案例中的Qt应用程序),使用strace工具。 就我而言,由于我从源代码构建VirtualBox-5.2.8 ,它在以下位置搜索libqxcb.so
"...VirtualBox-5.2.8/out/linux.amd64/release/bin/platforms/"而不是default库路径, Qt安装路径等等。因此,没有ldd检查,其他解决方案都有效。 并且设置QT_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 . . . 

这是我的Qt5.10.1时刻,我从安装的Qt5.10.1platforms目录中创建了symlink"...Qt5.10.1/Tools/QtCreator/lib/Qt/plugins/platforms/"到搜索路径上"...VirtualBox-5.2.8/out/linux.amd64/release/bin/" 。 因此,使用Clang/LLVM从Linux( Ubuntu 17.10 x86_64 )上构建的VirtualBox-5.2.8终于成功启动了

事实上,另一个有趣的事情是,我已经在Ubuntu 17.10 x86_64上完全使用Clang/Clang++/LLVM构建了VirtualBox-5.2.8经过大量的努力 – 对于FreeBSD ,已经有一个使用clang构建VirtualBox的端口但是对于Linux来说,它是我看到了很大程度上依赖于GCC ,因此需要付出很多努力才能在Ubuntu 17.10 x86_64上使用Clang/Clang++/LLVM从目标Linux/AMD64Ubuntu 17.10 x86_64成功构建VirtualBox-5.2.8Ubuntu 17.10 x86_64 )并在解决其他问题以及臭名昭着的libqxcb.so之后成功启动它。

干杯。

当我在Ubuntu 18.04上运行模拟器时,这就解决了一些问题。

  $ vim~ / .bashrc 

在文件末尾添加以下行。 我在/opt/Android/Sdk安装了我的Android SDK

 export ANDROID_HOME=/opt/Android/Sdk export ANDROID_SDK_ROOT=/opt/Android/Sdk export ANDROID_AVD_HOME=/home//.android/avd export LD_LIBRARY_PATH="/opt/Android/Sdk/emulator/lib64:$LD_LIBRARY_PATH" export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins 

对于遇到这种情况的未来读者 – 在开始(危险地)使用符号链接到共享库之前,我强烈建议您运行

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) 

所以我用Google搜索了version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16))错误并找到解决方案 ,解决了这个问题。

plugins/platforms/libqxcb.soqt install platforms/libqxcb.so到应用程序目录中的platforms/libqxcb.so