首页 > 编程语言 >Qt程序加载Qt platform plugin 'xcb' 出错问题解决

Qt程序加载Qt platform plugin 'xcb' 出错问题解决

时间:2024-04-12 16:11:57浏览次数:32  
标签:xcb x86 lib plugin gnu 64 so.6 linux Qt

1.Qt程序运行环境

  • ubuntu 16.04
  • Qt5.12.3
  • Qt可执行程序

编译后运行Qt可执行程序后出现报错

报错内容:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.

问题排查

因为pro文件中增加了jsoncpp的库依赖后,运行时才出现上述运行时的报错

LIBS += -L/usr/lib/x86_64-linux-gnu/ -ljsoncpp

因为代码中使用了第三方的json库,所以添加上面的该依赖之后才出现的问题。猜测jsoncpp的依赖不完整或者是库的平台版本(platform)不一致, 以及本身“xcb”Qt插件库依赖存在问题。

解决过程步骤

#查看测试程序的platform版本
file xxx可执行程序
#查看该库的platform版本
file /usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.7.2

输出

RoutePlan: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux
2.6.32, BuildID[sha1]=6718b5a1cb4efa74ca5efd1cf8ab4d0bf8c5afc9, not stripped


/usr/lib/x86_64-linux-gnu/libjsoncpp.so.1.7.2: ELF 64-bit LSB shared object,
x86-64, version 1 (SYSV), dynamically linked,
BuildID[sha1]=6148d23fe92c8d73c2bc30ec2e01c89aa240a52d, stripped

可见可执行程序和该库的平台版本均为x86-64,所以平台版本一致问题排除。然后可以使用ldd -v命令看下该第三方库的所有依赖树是否完整,注意加“-v”参数才能看到最完整的依赖树。

huanglidi@hld-vm:/usr/lib/x86_64-linux-gnu$ ldd -v libjsoncpp.so.1.7.2
	linux-vdso.so.1 =>  (0x00007ffe965cc000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f572f213000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f572ef0a000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f572ecf4000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f572e92a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f572f7c6000)

	Version information:
	./libjsoncpp.so.1.7.2:
		libgcc_s.so.1 (GCC_3.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1
		libm.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libm.so.6
		libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
		libstdc++.so.6 (GLIBCXX_3.4.9) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
		libstdc++.so.6 (CXXABI_1.3) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
		libstdc++.so.6 (GLIBCXX_3.4.11) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
		libstdc++.so.6 (GLIBCXX_3.4.21) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
		libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
	/usr/lib/x86_64-linux-gnu/libstdc++.so.6:
		ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
		libm.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libm.so.6
		libgcc_s.so.1 (GCC_4.2.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1
		libgcc_s.so.1 (GCC_3.3) => /lib/x86_64-linux-gnu/libgcc_s.so.1
		libgcc_s.so.1 (GCC_3.0) => /lib/x86_64-linux-gnu/libgcc_s.so.1
		libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.18) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.3.4) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.17) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.3.2) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
	/lib/x86_64-linux-gnu/libm.so.6:
		ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
		libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_PRIVATE) => /lib/x86_64-linux-gnu/libc.so.6
	/lib/x86_64-linux-gnu/libgcc_s.so.1:
		libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
		libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
	/lib/x86_64-linux-gnu/libc.so.6:
		ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
		ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2
		
#libqxcb.so库依赖打印太多,这里就不post上来了,结果是库依赖是完整的

查看json库以及libqxcb.so库的依赖库依赖都是完整的,因此猜测是库依赖的问题不成立。所以再回到报错信息Could not load the Qt platform plugin "xcb" in "" even though it was found.上,这里的xcb库找到了但是无法加载,是不是可能存在两个xcb库,且刚好在LIBS += -L/usr/lib/x86_64-linux-gnu/这个路径上!

sudo find / -name libqxcb*
[sudo] huanglidi 的密码: 
/home/huanglidi/Qt5.12.3/Tools/QtCreator/lib/Qt/plugins/platforms/libqxcb.so
/usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so

果然如此,程序的依赖库查到了一个不正确的xcb库上
最终解决方案:

问题解决!

标签:xcb,x86,lib,plugin,gnu,64,so.6,linux,Qt
From: https://www.cnblogs.com/HuangLiDi/p/18131530

相关文章

  • VS studio 上开发Qt——Qt VS studio Tool的使用
    1.VS上安装Qt扩展点击菜单栏【扩展】->【管理扩展】,在搜索框搜索“Qt”,点击下载QtVisualStudioTools,以2022版为例,需要关闭所有窗口才能执行安装关闭VS后,弹出安装窗口,等待其安装完成2.新建QT工程测试等待安装完成后,添加一个QtVertion后(前提已经安装了Qt开发环境)即可......
  • Qt 如何遍历序列容器(QVector|QMap|...)
    QT提供了两种风格的遍历器:Java和STL一、Java风格遍历器Java风格的遍历器是Qt首先推荐使用的形式。这种风格比起STL风格的遍历器更方便。方便的代价就是不如后者高效。Java风格的遍历器指向的是两个元素之间的位置,而不是指向元素本身。因此,它们可能会指向集合第一......
  • Qt编译MySQL驱动
    Qt编译MySQL驱动参考:qt6.5.0MySQL驱动手动编译以及数据库连接详细教程以及注意事项附资源链接_qt编译mysql驱动-CSDN博客由于MySQL等数据库的client库遵循的协议与GPL不兼容,因此Qt发布时不带有这些驱动,需要自行编译。在Qt5版本的编译由于使用傻瓜式的qmake,要简单很多:QT出现没......
  • 上海泗博推出OPLink软件---助力企业快速搭建OPC与MQTT平台通信
    OPLink是上海泗博自主研发的基于OPC数据采集及转发,OPC数据到MQTT通信的产品。它是基于上海泗博多年的OPC应用经验和工业通信产品的开发背景,推出的OPC/MQTT工业通信软件。这款软件设计简洁、实用、稳定。同时,OPLink还具备与KepwareLinkMaster相似的数据转发功能,可实现PLC设备间的......
  • QtCreator配置C++20开发环境
    我不知道你的QtCreator是什么版本的,但是我觉得操作方案是相同的,让QtCreator编译C++20代码,需要你有一个支持C++20的编译器,不管你是msvc还是gcc,总要有一个。如果你和我一样,用的5.12.12,那真的太巧了,请看步骤吧:配置kit:首先你应该有一个Qt版本的列表,如果没有,请你自行添加,添加的方式......
  • Qt 多窗体
    前言        在Qt编程中经常会遇到要在多个界面之间切换的情况,如从登录界面跳转到主界面,从主界面跳转到设置界面,再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。登录窗口    创建基类为QMainWindow,类名为LoginWin。再使用ui界面设计。 ......
  • Qt 对话框常见类型
    前言        对话框是GUI程序设计中不可或缺的组成部分,很多不能或者不适合放入主窗口的功能组件都必须放在对话框中。        Qt使用QDialog类实现对话框,通常会设计一个类继承QDialog类。QDialog类(及其派生类,以及所有Qt:Dialog类型的类)对其parent......
  • 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss
    往期回顾【QT入门】Qt自定义控件与样式设计之qss介绍(Qtstylesheet)-CSDN博客【QT入门】Qt自定义控件与样式设计之qss选择器-CSDN博客【QT入门】Qt自定义控件与样式设计之QLineEdit的qss使用-CSDN博客 【QT入门】Qt自定义控件与样式设计之QPushButton常用qss这里我......
  • 【QT入门】 Qt自定义控件与样式设计之QCheckBox qss实现按钮开关
    往期回顾【QT入门】Qt自定义控件与样式设计之QPushButton常用qss-CSDN博客【QT入门】Qt自定义控件与样式设计之QPushButton实现鼠标悬浮按钮弹出对话框-CSDN博客【QT入门】Qt自定义控件与样式设计之QComboBox样式表介绍-CSDN博客 【QT入门】Qt自定义控件与样式设计之......
  • Qt使用Sqlite数据库-2
        上一篇文章介绍了sqlite数据库在Qt中基本使用方法(链接:Qt使用Sqlite数据库-1(入门级)-CSDN博客)。今天继续学习数据库常用的语法。1.删除数据库内容voiddeleteData(){QStringSql;//拼接sql语句Sql="DELETEFROMPerson_TableWHEREName='张......