背景
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,音视频,内核知识可以联系我,适当打赏解决困惑。