Can not load “libqxcb.so”

在Linux系统中部署Qt程序时,遇到无法加载Q平台插件'xcb'的问题,原因是缺少libqxcb.so库及其依赖。解决方法包括:1)在部署目录创建platforms子目录;2)复制开发机Qt安装目录下的libqxcb.so到该目录;3)使用ldd检查libqxcb.so的依赖并拷贝相应库到安装包的lib目录;4)更新LD_LIBRARY_PATH环境变量,确保指向安装包的库目录。完成上述步骤后,程序应能正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天将qt的程序打包在客户机器上部署,弹出如下提示:

Got keys from plugin meta data ("xcb")
Cannot load library /home/lc1/Desktop/comTool/bin/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found (required by /home/lc1/Desktop/comTool/bin/platforms/libqxcb.so))
QLibraryPrivate::loadPlugin failed on "/home/lc1/Desktop/comTool/bin/platforms/libqxcb.so" : "Cannot load library /home/lc1/Desktop/comTool/bin/platforms/libqxcb.so: (/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found (required by /home/lc1/Desktop/comTool/bin/platforms/libqxcb.so))"
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.

这种错误只会在linux或类linux操作系统上出现,Windows上不会出现。因为Windows机器不需要qxcb库。造成这种错误的原因是:1):部署软件时,没有将Qt插件文件下的platforms中的libqxcb.so库部署上去。2): 原因1)中的libqxcb.so库部署了,但是原因 1)中的libqxcb.so库又依赖了其它的Qt库,而这些依赖的库本应该从你提供的安装包的库目录查找的,现在却是从其它地方找的,如:从上面可以看到libqxcb.so依赖了libQt5XcbQpa.so.5,这个库本应该在你安装目录下,比如:你安装目录下有lib文件夹,且lib文件夹下有个libQt5XcbQpa.so.5,但从上面的提示可以看出,程序搜索的是/usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5,而不是你安装包目录下的lib文件夹下的libQt5XcbQpa.so.5,虽然说都是libQt5XcbQpa.so.5,但版本不一致可能会导致出现加载库失败,比如:你部署机器的linux系统自带的Qt(一般是因为linux有图形界面,而图形界面用到了Qt,所以对于图形界面的linux系统一般会有些Qt的库)版本是5.6.1,而你部署的程序是用其它版本开发的,比如:Qt 5.14.1,这就会导致不兼容而加载库失败。

解决方法如下:

1):在你程序需要部署的目录即安装包目录下新建platforms目录。

2):到你开发的机器上的Qt安装目录下的plugins/platforms目录下找到libqxcb.so,并将其拷贝到步骤1)中的platforms目录。

3):执行ldd libqxcb.so 以便找出libqxcb.so依赖的所有Qt库。

4):将步骤3)中找到的依赖库中所有和Qt有关的库拷贝到你安装包下的库目录下,如:

 安装包目录/lib 

      然后建立一些库的链接。

经过这四步骤后,目录应该如下;

 

   

5):执行:

sudo /etc/profile

在文件的末尾加入:

 export LD_LIBRARY_PATH=LD_LIBRARY_PATH:安装包目录/lib 

注意:有部分linux在/etc/profile中设置LD_LIBRARY_PATH不起作用,对这部分linux请自行查阅相关手册。

6):重启linux。

7):执行如下命令:

      

echo $LD_LIBRARY_PATH

如果输出中包含了 “ 安装包目录/lib”目录,则5)步骤配置成功

如果上面都没问题,则部署的程序应该能跑起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值