Ubuntu解决Qt creator 运行程序时xcb not found的问题

背景

aarch64在ubuntu编译成功并且烧录到主板上能正常运行,为了方便调试UI,于是打算在x86的ubuntu主机上配置一个Qt运行环境,结果编译了x86后,qtcreator总是报以下错误:

t.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““

原因是xcb没有正确安装,少了很多库。所以需要先安装xcb后再重新编译qt源码。

1、安装qt源码

下载Qt5.12.9源码,下载链接如下:(只是我选择的路径)

Index of /new_archive/qt/5.12/5.12.9/single

这个可以从清华开源网进行下载

清华大学开源软件镜像站 | Tsinghua Open Source Mirror

找到qt的目录,下载需要的qt源码包,此处使用qt-everywhere-src-5.12.9演示:

使用以下命令进行解压:

tar -xvf qt-everywhere-src-5.12.9.tar.xz

解压后会得到目录qt-everywhere-src-5.12.9:

PS:这个压缩包包含了Linux x86的qmake配置与aarch64的qmake配置,基本不需要特定配置,如果还有其他编译链可以自行去 qtbase/mkspecs/ 配置,

编译qt源码

此处描述Ubuntu x86的编译配置:

在qt-everywhere-src-5.12.9目录新建一个文件x86.sh,并且赋予权限+x:

chmod +x x86.sh

想省事可以

chmod 777 x86.sh

输入以下配置信息:

#! /bin/bash 
./configure -prefix /opt/Qt5.12.9/5.12.9/x86_64
-opensource -confirm-license
-release
-strip
-shared
-optimized-qmake
-cstd c11
--rpath=no
-pch
-skip qt3d
-skip qtactiveqt
-skip qtandroidextras
-skip qtcanvas3d
-skip qtconnectivity
-skip qtdatavis3d
-skip qtdoc
-skip qtgamepad
-skip qtlocation
-skip qtmacextras
-skip qtnetworkauth
-skip qtpurchasing
-skip qtremoteobjects
-skip qtscript
-skip qtscxml
-skip qtsensors
-skip qtspeech
-skip qtsvg
-skip qttranslations
-skip qtwebengine
-skip qtwebview
-skip qtwinextras
-skip qtwayland
-skip qtxmlpatterns
-make libs
-make examples
-nomake tools -nomake tests
-gui
-widgets
-dbus-runtime
--glib=no
--iconv=no
--pcre=qt
--zlib=qt
--freetype=qt
--harfbuzz=qt
--libpng=qt
--libjpeg=qt
--sqlite=qt
-plugin-sql-sqlite
-qt-xcb -feature-thread -feature-xkbcommon -system-xcb
-qpa xcb
-recheck-all

ps:

-prefix /opt/Qt5.12.9/5.12.9/x86_64

代表编译完成后的安装路径,可以适当更改,但是要确保路径存在。

然后运行脚本:

./x86.sh

编译异常

如果主机没有正常安装或者安装少了xcb的库的时候,运行这个脚本后会出现警告信息:

ERROR: Feature 'xkbcommon' was enabled, but the pre-condition 'libs.xkbcommon' failed.

ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && features.xkbcommon && libs.xcb' failed.

ERROR: Feature 'system-xcb' was enabled, but the pre-condition 'features.xcb && tests.xcb_syslibs' failed.

为什么会出现这些信息呢?

简单来说,是因为xcb没有正确安装或者安装库缺少了。

根本原因是:


ERROR: Feature 'xkbcommon' was enabled, but the pre-condition 'libs.xkbcommon' failed.

这个错误表示虽然启用了 xkbcommon 特性,但它的先决条件 libs.xkbcommon 未满足。解决方法:

确保你的系统上已经安装了 xkbcommon 库及其头文件。你可能需要安装 libxkbcommon 包,具体的安装方式取决于你使用的操作系统和包管理工具。

ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && features.xkbcommon && libs.xcb' failed.

这个错误表示尽管启用了 xcb 特性,但它的先决条件没有被满足。解决方法:

确保多线程支持已启用,你可以使用 -feature-thread 选项。

确保 xkbcommon 特性已启用,你可以使用 -feature-xkbcommon 选项。

确保你的系统上已经安装了 xcb 库及其头文件,你可能需要安装 libxcb 包。

ERROR: Feature 'system-xcb' was enabled, but the pre-condition 'features.xcb && tests.xcb_syslibs' failed.

这个错误表示虽然启用了 system-xcb 特性,但它的先决条件没有被满足。解决方法:

确保 xcb 特性已启用,你可以使用 -feature-xcb 选项。

确保 xcb 的相关系统库已正确安装,你可能需要安装 libxcb 和其他相关的 xcb 库。


如何解决呢?首先,安装以下xcb的库:

sudo apt install libx11-*

sudo apt install libx11*

sudo apt install libxcb

sudo apt install libxcb*

sudo apt install libxkbcommon-x11-dev

sudo apt install libxkbcommon-*

安装完成后删除原来的qt-everywhere-src-5.12.9目录,重新解压qt-everywhere-src-5.12.9.tar.xz,并创建x86.sh到qt-everywhere-src-5.12.9目录里,重新运行x86.sh

此时配置ERROR信息就消失了,这时候就可以正常编译。可以使用命令:make -j$(nproc) 进行编译。

编译完成的结果:

运行make install,安装到指定路径/opt/Qt5.12.9/5.12.9/x86_64

install失败

如果出现install失败,原因分为两类:

1、路径不存在

自己去创建好路径再重新install

2、没有权限:

运行命令sudo make install 重新安装

install 成功:

重新打开qtcreator,运行test程序:

成功运行,不再报错。


文本到此结束,有疑问可以关注我私信交流。

如果需要学习或者咨询qt,音视频,内核知识可以联系我,适当打赏解决困惑。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值