小米路由器R2D交叉编译mysql

之前已经介绍过用docker构建小米路由器交叉编译环境,使用的版本是5.1.73。这个版本在官网上已经找不到了,我猜有可能是因为在ubuntu 16.04上编译时,会出现内存泄露,这也是我选择用docker构建编译环境的原因。Mysql 5.1.73的源文件我是在搜狐的一个镜像上找到的。Link:http://mirrors.sohu.com/mysql/MySQL-5.1/
编译过程如下:
首先编译一个PC版本的Mysql,主要的原因是后面交叉编译时需要用到PC版Mysql的可执行文件。不需要make install

tar -zxf mysql-5.1.73.tar.gz
cd mysql-5.1.73
./configure -prefix=/usr/local/mysql
make

如果出现“checking for termcap functions library... configure: error: No curses/termcap library found”,那么就安装libncurses5-dev来解决。

apt-get install libncurses5-dev

接下来编译小米路由器版的mysql。
首先编译一下arm版本的ncurses5

tar zvxf 
./configure --host=arm-xiaomi-linux-uclibcgnueabi --prefix=/userdisk/data/ncurses5
make
make install

然后是mysql

tar -zxf mysql-5.1.73.tar.gz
cd mysql-5.1.73

修改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; }; }; }

改为

if test "$cross_compiling" = yes; then
  echo "skip corss_compiling test";

配置

./configure --host=arm-xiaomi-linux-uclibcgnueabi --prefix=/data/mysql/ --without-docs --without-man --without-debug --with-charset=utf8 --with-extra-charsets=gbk,gb2312,utf8,ascii --enable-local-infile --with-mysqld-user=root --with-named-curses-libs=/data/ncurses/lib/libncurses.a

编译make之后会遇到一个问题,

/bin/bash: ./gen_lex_hash: No such file or directory
make[1]: *** [lex_hash.h] Error 127
make[1]: Leaving directory `/opt/mysql-5.1.73/sql'

把之前PC版的文件替换之后即可解决这个问题,如果出现“sql_parse.cc:5741:21:operator '<' has no left operand”类似这个错误,解决办法是,修改sql_parse.cc文件,在第5740行加入#define STACK_DIRECTION 1,保存后应该就能正常make了。然后make install之后就可以拷贝到小米路由器上了。

参考链接:http://bbs.xiaomi.cn/t-11223228

你可能感兴趣的:(小米路由器R2D交叉编译mysql)