ARM Qt MySQL插件移植记录。和一些新手容易遇到的问题。

移植前需了解的小知识

①使用sudo去执行命令时,系统检索环境变量不是在/etc/profile下检索,而是

从/etc/sudoers下检索。

如果说没在sudoers设置交叉编译器的环境变量,编译时就会从系统默认路径检

索编译器,导致交叉编译出错。

提示找不到交叉编译器

具体添加方法请参考:使用sudo执行gcc命令的时候提示找不到命令

②交叉编译器只能用一种,比如用arm-linux去编译A文件后,当另一个用

arm-linux-gnueabihf编译器编译的文件,需链接A文件中的一个库时,就会出错,

提示“error adding symbols”之类的错误。bu

2021.2.28补充
若目标机未移植MySQL,或移植的MySQL与插件存在版本问题,可从arm-qt5.12.9需用到的mysql库.zip
下载arm-qtMySQL插件和arm-mysql库
没积分的朋友可从我上传到正点原子论坛的压缩包下载(有积分就支持下呗)

正文:

先说说移植ARM版QtMySQL插件的步骤

操作环境为ubuntu16.04

本人为学生党,Linux菜鸡一枚。
有啥问题欢迎指正!!!

       在移植的过程中,搜索过很多的教程,也许是我太菜了,在这过程中被很多模糊的说法困扰,这里我把这些困扰讲清楚。


总结步骤如下:详细步骤链接我放后面了
   1. 下载MySQL、Qt、ncurses 源码。(最开始我下载的MySQL版本是5.1.51版本,这也是问题的源头)

   2. 编译MySQL。(为了获得X86版gen_lex_hash,可执行文件,但网上的教程描述为库,对于新手来说不太清晰。编译ARM版MySQL时需要使用。)

   3. 编译、安装ncurses (编译ARM版MySQL时需要使用其中的.so文件(库))。

   4. 编译ARM 版MySQL。

   5. 编译ARM版QtMySQL插件。

   6. 复制libqsqlmysql.so到ARM环境。


        因为有前人经验,所以步骤5前的操作虽然也遇见过一些问题,但都在短时间内解决了。ARM版MySQL也可正常运行。如果只需移植MySQL到ARM环境,可参考如下连接:

mysql-5.1.73 数据库在AM335X上移植

移植MySQL到嵌入式ARM平台


       讲得很清楚,按部就班就可以完成。两个链接结合着看 ,在编译ARM架构MySQL时参考第二个链接 ,移植ARM架构MySQL时参考第一个链接 !!!(强调:交叉编译器要使用同一种

再说说我遇到的问题:

       前面的准备工作完成后,便开始编译ARM版MySQL插件。照网上的教程按部就搬后,遇到了如下问题:

不兼容?是缺少什么库吗?我当时是这么想的
       “跳过不兼容”?什么鬼??于是我就搜索 “libmysqlclient_r.so” 这个关键词。有关这个关键词的问题网上五花八门,解决方法基本都是下载库、建立软链接之类的。。。就这样我卡在了这个问题上,后面又因为开学了,要上课什么的,这个问题就搁置了。

其实解决的思路就错了,并不是缺少库,而是程序架构不是同一种(ARM架构不能运行x86架构的程序)。

       出现这个错误的原因就是错用了qmake!!!(马虎了,使用的是x86架构的qmake)

当时却为解决这个问题花了很多时间都未果。这就值得反思了,解决问题一定要先弄清楚问题。

最后说说怎么通过qmake编译出ARM-MySQL插件(强调:生成的Makefile需做个小修改

步骤如下:
   1、进入Qt源码中的MySQL插件目录。(不同Qt版本路径会有些不同,我用的是Qt5.12.9)
cd /home/yyj/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/mysql

   2、获取ARM版MySQL的include文件夹和lib文件夹的路径。(具体看你安装在哪)
在我这是:

yyj@ubuntu:~/ARM-MySql5.1.73/mysql-arm/include/mysql$ pwd
/home/yyj/ARM-MySql5.1.73/mysql-arm/include/mysql

yyj@ubuntu:~/ARM-MySql5.1.73/mysql-arm/lib/mysql$ pwd
/home/yyj/ARM-MySql5.1.73/mysql-arm/lib/mysql

   3、回到MySQL插件目录,通过qmake(ARM架构的) mysql.pro 文件生成Makefile文件。

sudo /home/yyj/Qt5.12.9/arm-qt/bin/qmake "INCLUDEPATH+=/home/yyj/ARM-MySql5.1.73/mysql-arm/include/mysql" "LIBS+=-L/home/yyj/ARM-MySql5.1.73/mysql-arm/lib/mysql -lmysqlclient_r" mysql.pro

   4、Makefile生成后,给Makefile做个小修改,再通过make命令开始编译mysql插件。
       下面是修改的地方:

       找到LIBS项,把-lpthread后的路径修改为ARM架构MySQL的lib文件夹的路径。

LINK          = arm-linux-gnueabihf-g++
LFLAGS        = -Wl,--no-undefined -Wl,-O1 -Wl,--enable-new-dtags -shared
LIBS          = $(SUBLIBS) -L/home/yyj/tslib-1.21/arm-tslib/lib -L/home/yyj/ARM-MySql5.1.73/mysql-arm/lib/mysql -lmysqlclient_r /home/yyj/Qt5.12.9/arm-qt/lib/libQt5Sql.so /home/yyj/Qt5.12.9/arm-qt/lib/libQt5Core.so -lpthread /home/yyj/ARM-MySql5.1.73/mysql-arm/lib/mysql/libmysqlclient.so   

       保存修改后再用sudo make编译。

sudo make

不修改的话会出现“libmysqlclient.so: file not recognized: 不可识别的文件格式”类

的提示。

没有链接正确的库

       最后出现如下提示,就编译成功了。

成功提示

       libqsqlmysql.so所在路径如下:

yyj@ubuntu:~/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers$ pwd
/home/yyj/Qt5.12.9/5.12.9/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers

验证成果:

ARM架构的.so
.so为ARM架构,交叉编译成功!

至于复制mysql插件到ARM环境:

       照着网上教程把该库文件复制到ARM环境Qt的/plugins/sqldrivers/下(没有

sqldrivers文件夹就创建一个),再在/lib文件加下建立软链接(可以省掉这步)。

MySQL插件就移植完成了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值