一、内容介绍
NanoPi Fire3是一款超小型八核Cortex-A53开源开发板,它采用三星S5P6818主控处理器,配备1GB DDR3内存,带千兆以太网接口,MicroHDMI,CMOS摄像头和RGBLCD等丰富的接口,兼容RPi GPIO,并内置QT5.10.0软件,尺寸只有75x40mm,本文将介绍如何在NanoPi Fire3开发板上,安装MYSQL并使用在QT5.10.0下开发的板上程序进行连接。
二、前置工作
1.在开始本文步骤之前,请先阅读以下文章:
《NanoPi Fire3:QT开发之编译与自启动》
https://blog.youkuaiyun.com/u010877050/article/details/103438750
2.本人所使用的的电脑系统为win10。开发板的镜像文件为s5p6818-sd-friendlycore-xenial-4.4-arm64-20191227.img
3.在电脑上使用QT5.10.0开发平台编写一个带有连接MYSQL数据库功能的程序,本文直接在前置工作1中的HelloWorld程序中加入了MYSQL的连接代码,只要修改2个文件HelloWorld.pro和main.cpp即可。
HelloWorld.pro
QT += quick sql
CONFIG += c++11
# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
static bool createConnection(QString sysDbAddr)
{
QSqlDatabase sysDb = QSqlDatabase::addDatabase("QMYSQL");
sysDb.setHostName(sysDbAddr); //连接数据库主机名
sysDb.setPort(3306); //连接数据库端口号
sysDb.setDatabaseName("helloworld"); //连接数据库名
sysDb.setUserName("root"); //数据库用户名
sysDb.setPassword("123456"); //数据库密码
if(!sysDb.open())
{
qDebug()<<"connect to mysql error"<<sysDb.lastError().text();
return false;
}
qDebug()<<"connect to mysql OK";
return true;
}
int main(int argc, char *argv[])
{
#if defined(Q_OS_WIN)
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
QGuiApplication app(argc, argv);
if(!createConnection("localhost"))
return -1;
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
4.下载qtbase的linux源码包,后面要用,这里提供QT官网该包的下载地址。
http://mirrors-wan.geekpie.club/qtproject/archive/qt/5.10/5.10.0/submodules/qtbase-everywhere-src-5.10.0.tar.xz
三、操作步骤
1.保证开发板连接至外网,使用Xshell登录开发板,输入以下3个命令安装mysql,安装过程中有可能因为网速太慢导致失败,如果失败了请更换网络再次尝试。
sudo apt-get update #更新软件源
sudo apt-get install mysql-server #安装mysql
sudo apt-get install libmysqlclient-dev #安装mysql-devel包
1)安装过程中会要求创建root用户的密码,与代码中的密码保持一致即可。
2)安装过程中可能有以下提示,没关系,没有啥影响。
2.启动mysql并登陆,新建一个空的数据库helloworld,并查看是否成功。
service mysql start
mysql -u root -p
你的密码
create database helloworld;
show databases;
3.将前置工作3中的程序放到板子上编译并运行,此时看到如下报错,说明板子内置的QT5.10.0只有sqlite的驱动,没有mysql的驱动(libqsqlmysql.so),所以我们需要自己在板子上编译mysql的驱动,但是板子上也没有QT的mysql源码文件,真是精简版啊,所以我们去官网下载源码包(前置工作4)。
输入以下命令发现,板子上确实只有sqlite的驱动文件。
cd /usr/local/Trolltech/Qt-5.10.0-nexell64/plugins/sqldrivers
ls
4.在Xshell中输入以下命令将源码包拷贝到开发板上并解压,本文对应路径为home/pi
rz
选择源码包
tar xvJf qtbase-everywhere-src-5.10.0.tar.xz
如果出现-bash: rz: command not found,输入以下代码安装一下rz工具包即可。
sudo apt-get install lrzsz
4.输入以下命令来到源码中mysql.pro的位置。
cd qtbase-everywhere-src-5.10.0/src/plugins/sqldrivers/mysql
5.输入以下命令进行编译。
sudo qmake-qt5 “INCLUDEPATH+=/usr/include/mysql” “LIBS+=-L/usr/lib/aarch64-linux-gnu -lmysqlclient” mysql.pro
make
这里有可能会报以下2种错,我们一一来解决:
1)qtsqldrivers-config.pri: No such file or directory
修改sqldrivers文件夹下的qtsqldrivers.pri文件。
注释掉include(
s
h
a
d
o
w
e
d
(
shadowed(
shadowed(PWD)/qtsqldrivers-config.pri)即可。
2)Library ‘mysql’ is not defined
修改mysql文件夹下的mysql.pro文件。
注释掉QMAKE_USE += mysql即可。
6.如果上一步成功编译了,那我们的libqsqlmysql.so也就生成好了,生成的路径为/home/pi/qtbase-everywhere-src-5.10.0/src/plugins/sqldrivers/plugins/sqldrivers/libqsqlmysql.so
7.最后一步,将我们生成的libqsqlmysql.so复制到对应的驱动文件夹下,可以输入以下指令进行复制,然后查看是否复制成功。
cp /home/pi/qtbase-everywhere-src-5.10.0/src/plugins/sqldrivers/plugins/sqldrivers/libqsqlmysql.so /usr/local/Trolltech/Qt-5.10.0-nexell64/plugins/sqldrivers
8.再次运行HelloWorld程序,发现Xshell输出了connect to mysql OK,说明已经连接到板子上的MYSQL数据库了。
9.另外有两点
1)这里提供作者已经编译好的libqsqlmysql.so文件,下载地址为
https://pan.baidu.com/s/1uUAZ5GuXCU7yzBCjCIPyLg,提取码n6hb
如果你手上的是NanoPi Fire3开发板(其它开发板或系统,不保证可行),安装完MYSQL,直接把这个文件放到对应的目录即可,省去编译的步骤。
2)使用以下命令安装已经编译好的库,虽然也能得到libqsqlmysql.so,但放到对应的目录下,执行程序时,会提示版本错误,所以还是自己动手编译吧。
sudo apt-get install libqt5sql5-mysql