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;
}
发表评论