【OK210试用体验】之第六篇:配置ARM平台的MySql数据库驱动插件(上) - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】之第六篇:配置ARM平台的MySql数据库驱动插件(上)

L490351555 ( 楼主 ) 2015-10-14 18:09:33  只看该作者 倒序浏览
编译器:arm-linux-gcc(4.3.2)
Pc平台:ubuntu
在移植之前有必要先说明一下几个问题:
1、MySQL还没有支持交叉编译的版本出现.但为了让编译继续,必须在configure脚本中将多处不支持交叉编译的命令全都注释掉,才能让configure顺利通过。
2、交叉编译过程中需要用到ncurses-5.6下的libncurses.a库,而这个库文件也必须是arm平台下的,所以我们在交叉编译MySQL时需要先自己手动交叉编译libncurses.a的库。
3、编译过程中需要运行gen_lex_hash,但这个命令是arm格式的在pc机上运行不起来,解决方法是要编译好一个在pc上运行的mysql,从相应的目录下拷出gen_lex_hash覆盖相应目录下的这个arm格式的gen_lex_hash (这里要注意的是这个pc机上运行的mysql编译路径要和现在这个arm上运行的mysql路径完全相同,否则后面同样的问题中执行命令时涉及到路径问题,解决办法是先把现在编译的arm平台的mysql目录改为其他名称,再解一个mysql包改名为mysql将其编译成pc上运行的版本,只要简单的用./configure |make就行了,再把pc版本的mysql改为mysql-pc,将原来的那个名称改回mysql即可(貌似有点晕乎)。
下面就是移植过程:
(1) 准备工作
①下载mysql的tar包,我这里用到的是mysql-5.1.51.tai.gz
②下载ncurses-5.6的tar包
③安装g++编译器root@ubuntu
   #apt-get install g++
④准备编译前请先确定已安装交叉编译器arm-linux-gcc(4.3.2),并已经在终端设置好环境变量,做好这些就可以开始移植工作了。
(2) 编译MySQL PC版本
①先下载压缩包到本地,并解压mysql-5.1.51.tar.gz到/opt/lib/mysql-5.1.51:
root@ubuntu:/opt/lib# tar zxvf mysql-5.1.51.tar.gz
②进入解压得到的源码目录中:
root@ubuntu:/opt/lib# cd mysql-5.1.51
③运行configure,生成makefile:
root@ubuntu:/opt/lib/mysql-5.1.51# ./configure -prefix=/usr/local/mysql  如果出现以下提示信息(没有出错就不用管):checking for termcap functions library… configure: error: No curses/ termcap library found
那么就安装libncurses5-dev进行解决:
root@ubuntu:/opt/lib/mysql-5.1.51# apt-get install libncurses5-dev
   ④安装完成之后,再次运行./configure -prefix=/usr/local/mysql,一切正常。
   ⑤直接开始运行make编译源代码:
   root@ubuntu:/opt/lib/mysql-5.1.51# make
   ⑥Make完成后,将这个文件夹改名为mysql-5.1.51-pc留作备用。
(3) 交叉编译MySQL -ARM版本
   根据最前面提到的问题,要交叉编译MySQL -ARM版本,首先我们得先得到一个交叉编译过的libncurses.a的库,所以为了方便,我们先做这一步。
  ①交叉编译ncurses-5.6.tar.gzi.
  先下载压缩包到本地,并解压ncurses-5.6.tar.gz到/opt/lib/ncurses-5.6:
  root@ubuntu:/opt/lib# tar zxvf ncurses-5.6.tar.gzii.
  进入解压得到的源码目录中:
   root@ubuntu:/opt/lib# cd ncurses-5.6iii
   运行configure,生成makefile:(我这里将ncurse安装到了/usr/local/ncurse)
   root@ubuntu:/opt/lib/ncurses-5.6# ./configure --host=arm-linux -prefix=/usr/local/ncurse --enable-staticv.
   直接开始运行make编译源代码  
   root@ubuntu:/opt/lib/ncurses-5.6# makeiv.
   直接开始安装:
   root@ubuntu:/opt/lib/ncurses-5.6# make install
   安装完成就可以拿来备用了。

  ②重新解压mysql-5.1.51.tar.gz到/opt/lib/mysql-5.1.51:
     root@ubuntu:/opt/lib# tar zxvf mysql-5.1.51.tar.gz
  ③进入解压得到的源码目录中:
     root@ubuntu:/opt/lib# cd mysql-5.1.51
  ④修改configure,注释掉不支持交叉编译的部分
     root@ubuntu:/opt/lib# gedit configure
   找到所有如下语句:
1 if test "$cross_compiling" = yes; then
2 { { $as_echo "$as_me:$LINENO: error: in `$ac_pwd':" >&5
3 $as_echo "$as_me: error: in `$ac_pwd':" >&2;}
4 { { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See `config.log' for more details." >&5
5 $as_echo "$as_me: error: cannot run test program while cross compiling See `config.log' for more details." >&2;}
6 { (exit 1); exit 1; }; }; }
7 else
修改成
8 if test "$cross_compiling" = yes; then
9 echo “skip corss_compiling test”;
10 #{ { $as_echo "$as_me:$LINENO: error: in `$ac_pwd':" >&5
11 # $as_echo "$as_me: error: in `$ac_pwd':" >&2;}
12 #{ { $as_echo "$as_me:$LINENO: error: cannot run test program while
13 # cross compiling See `config.log' for more details." >&5
14 #$as_echo "$as_me: error: cannot run test program while cross compiling #See `config.log' for more details." >&2;}
15 #{ (exit 1); exit 1; }; }; }
16 Else
   ⑤交叉编译MySQL
    有了这些准备工作,这个时候就可以交叉编译MySQL了。
Ⅰ.配置configure./configure --host=arm-linux --enable-static --with-named-curses-libs=/usr/local/ncurses/lib/libncurses.a --prefix=/usr/local/mysql --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8
这里请注意我标出来的橙色部分,首先是使用libncurses.a库,在交叉编译MySQL-ARM版本的第一步,交叉编译ncurses-5.6时,我的ncurse安装目录就是/usr/local/ncurses/,这里前面你要是修改了安装目录,这里就需要注意一定要指向你的安装目录第二就是我将交叉编译的MySQL也安装到了/usr/local/mysql,这个是因为我在编译PC版本的MySQL时只是使用了make,并没有make install。如果你也需要使用ubuntu下面的MySQL,并且当时使用了make install,这里就需要注意目录问题。
Ⅱ.直接开始运行make编译源代码:root@ubuntu:/opt/lib/mysql-5.1.51# make出现错误:
make[2]: Leaving directory `/opt/mysql-5.5.3-m3/sql'
./gen_lex_hash > lex_hash.h-t
/bin/sh: ./gen_lex_hash: cannot execute binary file
这个时候就需要将刚才我们编译好的PC版本的$MYSQLsql目录下面的gen_lex_hash,然后cp到现在交叉编译时对应的$MYSQLsql目录覆盖即可。
这时注意:覆盖完成后不要急于make,这时输入如下命令:
    root@ubuntu:/opt/lib/mysql-5.1.51# touch –m sql/gen_lex_hash
    然后再执行make
    root@ubuntu:/opt/lib/mysql-5.1.51# make
上面的命令是改变gen_lex_hash的最后修改时间,这样做的目的是告诉编译器gen_lex_hash已经是最新的了,不要重新生成它,否则编译器检查gen_lex_hash和它的依赖文件的最后修改时间会发现gen_lex_hash比它的依赖文件更旧,就会重新交叉编译生成它,这样不管我们做几次覆盖的工作错误都还会再现.
出现错误:sql_parse.cc:5432:21: operator '<' has no left operand
   解决办法:
这是由于宏变量STACK_DIRECTION没有定义初值,网上查找资料发现arm中定义STACK_DIRECTION为1,所以找到sql_parse.cc文件,将第5432行的前面一行加入#define STACK_DIRECTION 1

Ⅲ.这时就应该能够正常编译,编译结束后就可以执行install root@ubuntu:/opt/lib/mysql-5.1.51# make install至此,编译arm平台的MySQL基本完成

(4) 编译mysql插件
你可以在QT的官方网站下载最新的qt-sdk-linux-x86-opensource-2010.05.1.bin,然后下载执行安装,我安装的位置是/opt/。
进入相应的位置找到mysql.pro文件
root@ubuntu: # cd /opt/qtsdk-2010.05/qt/src/plugins/sqldrivers/mysql
修改mysql.pro文件,添加如下两行:
INCLUDEPATH += /usr/local/mysql/include/mysql
LIBS += -L/usr/local/mysql/lib/mysql –lmysqlclient_r
然后执行以下几个命令:
#qmake mysql.pro
#make
#make install
编译完成,在该路径下就会生成一个libqsqlmysql.so文件,将该文件复制到/opt/qtsdk-2010.05/qt/plugins/sqldrivers目录下就可以了。




0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-5-7 21:16 , Processed in 0.747025 second(s), Total 65, Slave 46 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表