Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件.

  • 格式:doc
  • 大小:81.00 KB
  • 文档页数:5

(原创)Ubuntu下编译ARM平台QtEmbedded的MySQL和MySQL插件需要引用的同学请注明文章出处,谢谢最近需要将一个程序移植到arm平台上,程序调用了MySQL数据库,所以就牵扯到将MySQL数据库移植到ARM平台上面,所以在网上大量查阅资料。

在baidu文库发现了一篇文档,是wlzxlc上传的文档名称为:《编译ARM平台的QtEmbedded的MySQL 插件和移植MySQL》。

下面说明里面介绍到:ARM平台下的QtEmbedded所需mysql插件,及MySQL的移植。

我的整个移植过程参考了这篇文档,但是遇到了很多的问题,所以又上网搜寻其它资料。

现在我已经移植成功,回头看这篇文档,就发现里面有很多疏漏甚至是错误。

这些东西如果不详细注明出来,更多的新手绝对还会重蹈我的覆辙,所以在这里将mysql 的arm+linux移植经验贴出来,希望对新手以及做相关方面工作的人能有帮助。

所有在《编译ARM平台的QtEmbedded的MySQL插件和移植MySQL》这篇文档中的错误以及注意事项,我也会一一列出,在下面我将其称为“原文”。

编译器:arm-linux-gcc(4.3.2)Pc平台:ubuntu在移植之前有必要先说明一下几个问题:1.MySQL还没有支持交叉编译的版本出现.但为了让编译继续,必须在configure脚本中将多处不支持交叉编译的命令全都注释掉,才能让configure顺利通过。

2.交叉编译过程中需要用到ncurses-5.6下的libncurses.a库,而这个库文件也必须是arm 平台下的,所以我们在交叉编译MySQL时需要先自己手动交叉编译libncurses.a的库。

(原文是说需要libncurses.so.5文件,这里我查阅很多资料发现,应该是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/sites//Downloads/MySQL-5.1/mysql-5.1.51.tar.g z②下载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 的时候只要指到具体路径就可以了,根本不需要这么麻烦……..②重新解压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找到所有如下语句:if test "$cross_compiling" = yes; then{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}{ { $as_echo "$as_me:$LINENO: error: cannot run test program while cross compiling See \`config.log' for more details." >&5$as_echo "$as_me: error: cannot run test program while cross compiling See\`config.log' for more details." >&2;}{ (exit 1); exit 1; }; }; }else修改成if test "$cross_compiling" = yes; thenecho “skip corss_compiling test”;#{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5# $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}#{ { $as_echo "$as_me:$LINENO: error: cannot run test program while# cross compiling See \`config.log' for more details." >&5#$as_echo "$as_me: error: cannot run test program while cross compiling #See \`config.log' for more details." >&2;}#{ (exit 1); exit 1; }; }; }Else保存推出原文那种注释方法,还需要找到离这段代码段比较远的一处#fi,这个本来就容易出问题,而且应该有将近4段类似代码,而原文只说明了2段,这样肯定是编译不过去的。

⑤交叉编译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。