最近要在银河麒麟上测试项目,在安装Qt和MySQL时遇到并解决了许多问题,特此记录一下。

目录

一、环境:

二、安装QT以及QT Creator

1. 准备工作

2. 生成makefile文件

2.1 插件目录(/plugins/platforms)下没有libqxcb.so

2.2 libqxcb.so与QT不兼容。

2.3 QT未找到插件所在目录

3. QT编译以及安装

4. QT Creator安装以及配置QT

三、安装MYSQL

四、QT连接MySQL数据库

五、小结


一、环境:

系统:银河麒麟桌面操作系统V10(SP1)

CPU:AMD Ryzen9 7845HX

二、安装QT以及QT Creator

这里参考了大佬的博客:linux下源码编译安装Qt_linux qt-CSDN博客

1. 准备工作

不过QT官网和各个镜像源站屏蔽掉了很多版本,我下载的版本是5.15.2

链接(清华大学镜像源):https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.15/5.15.2/single/

将其复制到/usr/local/目录下

cp qt-everywhere-src-5.15.2.tar.xz /usr/local

进入/usr/local/目录,解压该文件,并进入目录

cd  /usr/local

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

cd qt-everywhere-src-5.15.2

2. 生成makefile文件

前面都和大佬的博客一致,但从“生成makefile文件”这一步开始,有些许问题。

由于没有指定xcd,又或是没有xcb相关库,在安装完成后,在QT Creator编译项目的时候会报错:Could not find the Qt platform plugin "xcb" in ""

目前问题已解决,参考博客有:

解决qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ in ““-CSDN博客

jetson nano——Qt问题(已解决)Feaure ‘xcb‘ was enabled, but the pre-condition ‘features.thread && libs_error: feature 'xcb' was enabled, but the pre-cond-CSDN博客

QT源码编译成静态库_讨论帖_牛客网

首先列出生成makefile文件所需的命令,可以基本杜绝上述问题。

sudo apt-get install libxcb*

sudo apt-get install libxkbcommon*

./configure -recheck-all

./configure -prefix /usr/local/Qt-5.15.2 -xcb

若问题还是存在,可继续看2.1/2.2/2.3

在这里汇总一下,原因有三个:

2.1 插件目录(/plugins/platforms)下没有libqxcb.so

这是我遇到的问题,在执行了make install后,在QT安装目录下没有找到libqxcb.so。

原因是“生成makefile文件”时,未指定xcb,所以在这一步要执行命令

(PS:若此前生成过,建议删除整个文件夹,重新解压.tar.xz)

./configure -recheck-all

./configure -prefix /usr/local/Qt-5.15.2 -xcb

//-prefix后跟的地址是指定QT安装目录,自己定义即可

若报错:Feature ‘xcb’ was enabled, but the pre-condition ‘features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11’ failed.

大概率是系统未安装xcb相关依赖库,执行相关命令即可(无论有无问题,建议都执行这两条命令)

sudo apt-get install libxcb*

sudo apt-get install libxkbcommon*

xcb相关库安装完成后,执行./configure -recheck-all会看到xcb相关都是yes了,再执行./configure -prefix /usr/local/Qt-5.15.2 -xcb,便不再报错。

这时,进入 /usr/local/Qt-5.15.2/plugins/platforms,发现自动生成了libqxcb.so。

2.2 libqxcb.so与QT不兼容。

大概率不是这个问题,因为只要安装QT后能自动生成libqxcb.so,就不会不兼容,除非是从其他地方复制过来的,可能会出现不兼容。

例如,我将Qt Creator安装目录下的libqxcb.so拷贝过来后,执行

ldd  /usr/local/Qt-5.15.2/plugins/platforms/libqxcb.so

发现libqxcb.so缺少的两个依赖库都是QT6的,但安装的是QT5。

2.3 QT未找到插件所在目录

若QT安装目录下/plugins/platforms自动生成了libqxcb.so这个文件,说明QT只是没有找到插件所在目录,可以通过修改环境变量解决。

//切换到root,方便后面的命令

sudo su -

//打开环境变量配置文件

vim /etc/profile

进入profile文件后,单击"I"进入编辑模式,在最底下添加

export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/Qt-5.15.2/plugins/platforms

点击esc,再输入:wq保存退出,然后输入

source /etc/profile

若环境变量未生效,重启系统即可。

3. QT编译以及安装

我给虚拟机分配了12个逻辑处理器,编译QT却需要一两个小时,为了加快编译时间,需要给其分配足够的线程。

参考博客:jetson nano——编译安装Qt_jetson编译安装qt-CSDN博客

首先查看cpu的核心数 

 lscpu

 

 可以看到CPU:12,说明核心数为12,然后设置编译线程数

make -j24 //通常为CPU核心数两倍

 基本上几十分钟解决问题,这时继续安装即可。

make install

环境变量可配可不配,若不配置,则需要手动去QT Creator配置

4. QT Creator安装以及配置QT

直接去官网或者镜像源网站下载.run文件即可。或者直接用sudo apt install qtcreator安装也可以(版本为4.11),以下给出清华镜像源网址:

Index of /qt/archive/qtcreator/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

 下载好后直接点击安装即可

然后就是配置QT版本,点击添加,选择刚才安装的QT目录/bin/qmake

接着添加套件,名称随便起,File system name决定了编译后的文件夹名。

Qt版本选择刚才添加好的QT版本,这样就可以了。

万事大吉,能够正常跑项目了,但所有字体都无法正常显示,并且QT报错如下 

QFontDatabase: Cannot find font directory /usr/local/Qt-5.15.2/lib/fonts.
Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig.

去网上查了查,发现是QT缺少字体库,解决方法是将字体导入/usr/local/Qt-5.15.2/lib/fonts目录下即可,我直接将windows的字体全部复制过来了,如图

三、安装MYSQL

我没有去官网下载安装包,而是直接用了apt install命令去安装

sudo apt install mysql-server

这样直接启动mysql就可以了

systemctl start mysql

然后就要登录mysql进行一些配置,如果直接登录不进去,说明没切换root

sudo su -

为了能顺利使用DBeaver来控制mysql数据库,要新建一个用户,让其可以被远程访问,并且授予其相关权限,以下是相关命令:

mysql -u root
create user '用户名'@'%' identified by '密码';
grant all privileges on *.* to '用户名'@'%' ; 
flush privileges;

四、QT连接MySQL数据库

新建一个项目,写入代码

qDebug() << QSqlDatabase::drivers();

QT会列出所以安装好的驱动,若没有QMYSQL,则说明未安装MySQL驱动。

如何安装MySQL驱动可以参考博客:Linux下的QT对MySQL数据库操作(超详细)_linux qt 连接mysql-CSDN博客

五、小结

以上是我在银河麒麟系统上搭建QT、MySQL环境遇到的问题以及解决方法。

本来QT也是通过apt install安装的5.12.12版本,但缺少QT源码以及未安装MySQL驱动(安装驱动需要QT源码进行编译),所以想着通过源码编译安装QT,然后就碰到了缺少xcb的错误,导致走了很多弯路,特此记录。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐