ARM开发板连接mysql远程服务器
大致步骤和流程
参考文章:
https://blog.csdn.net/Aa_lihua/article/details/104230081
https://blog.csdn.net/Aa_lihua/article/details/104287614
首先开始我们需要编译一个mysql的源码,此处我使用的就是上面提到的文章中的那位大佬的,然后根据他的流程你应该能编译出一个arm版的mysql库,下面我只讲一些问题。编译好后把lib库上传到开发板中的lib文件夹,然后在根据这位大佬的第二篇文章继续编译qt版本的arm端mysql,在导入到开发板中即可,下面开始说详细流程
1,编译mysql源码libmysql
- 首先在官网下载这个源码
源码链接
- 编译出libmysql
首先将下载好的源码解压放到一个目录下面,下面是我解压好的
然后你需要下载一个cmake工具
sudo apt-get install cmake
接着就是配置源码包里的CMakeLists.txt,在开头加入交叉编译工具链的名称,如下所示:
SET(CMAKE_CXX_COMPILER "arm-linux-g++")
SET(CMAKE_C_COMPILER "arm-linux-gcc")
添加好后输入下面指令对它进行配置
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=安装路径
配置完后直接输入
make
make install
如果顺利的话你在你刚刚填的安装路径下会出现一个文件夹,下面的lib和include都是我们后面要用到的
接下来将这个文件夹的lib库中的动态库都上传到开发板的lib文件夹下:
此时客户端部分已经完成了,可以使用c语言或者c++就能使用了,然后我们如果还需要使用qt作为mysql连接的话请接着看下去
编译qt的mysql驱动
在编译之前请确保你的qt交叉编译工具qmake的版本和你要编译qt的mysql驱动的源码版本一致,否则大概率会出现这个问题,发现有mysql驱动了但是还是提示你驱动问题,这就很烦了,楼主就是踩了这个坑!
[root@GEC6818 /projeckt_app]#./mysql_test
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
("QSQLITE", "QMYSQL", "QMYSQL3")
????? "Driver not loaded Driver not loaded"
- 编译qt自带的mysql驱动源码
先下载一份和你qmake交叉编译工具链相同版本的qt源码,我此处使用的是这个
然后解压到一个地方,在进入到这个目录下:
qt-everywhere-opensource-src-5.7.0/qtbase/src/plugins/sqldrivers/mysql
该目录下的内容
紧接着我们需要修改mysql.pro文件为如下,此处我的路径和lib库为我们之前刚刚编译mysql源码的库路径
然后在这个路径下输入qmake和make对文件进行编译
/usr/local/Qt-Embedded-5.7.0/bin/qmake ./mysql.pro
make
编译完成完成后libqmysql.so就会出现在这个目录下
接着将这个库拷贝到开发板你的qt库目录下(如果没有sqldrivers这个文件夹可以自己手动创建一个)
然后再在lib文件夹下创建一个libqsqlmysql.so的软链接
ln -s /usr/local/Qt-Embedded-5.7.0/plugins/sqldrivers/libqsq 、/lib/lmysql.so libqsqlmysql.so
然后我们就可以写个qt的程序测试下了!到此大功告成
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtDebug>
#include <QSqlDatabase>
#include <QSqlError>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
QStringList list = QSqlDatabase::drivers();
qDebug()<<list;
db.setHostName("localhost");
db.setUserName("test");
db.setDatabaseName("demo");
db.setPassword("Li@123456");
db.setPort(3306);
if(!db.open()){
qDebug()<<"失败原因:"<<db.lastError().text()<<endl;
printf("connect faild!\r\n");
}else {
qDebug()<<"连接成功!"<<endl;
printf("connect OK!\r\n");
}
}
MainWindow::~MainWindow()
{
delete ui;
}