Flowers_World
分类: 嵌入式
2014-12-08 20:53:24
参考博文:http://www.cnblogs.com/Charles-Zhang-Blog/p/3529980.html
一:开发环境
主机开发环境: VMWARE 下安装的 UBUNTU 10.04
gcc编译器: ubuntu自带的,version 4.4.3
开发板:
交叉编译器 arm-linux-gcc version 4.4.3
二:编译过程
2) 安装编译器:用的是4.4.3的交叉编译器。gcc之类的都是ubuntu10.04自带的。
3) 编译PC版本的mysql备用
a) 解压mysql-5.1.51到/opt/mysql-5.1.51: tar zxvf mysql-5.1.51.tar.gz
b) cd mysql-5.1.51
c) ./configure --prefix=/usr/local/mysql
d) make 注意,这里无需运行make install,以为主要是为了用pc版本里的gen_lex_hash库。(注意一定要先make后,再去修改文件夹名称)
e) 将文件夹mysql-5.1.51改名为mysql-5.1.51-pc备用。(将gen_lex_hash单独备份保存一下)
f) 文档上说这里会出错,但我在编译的过程中没有碰到,唯一的问题是编译了arm版本的,重新通过改文件夹的名字回头编译pc版本的时候会报错。
4) 编译arm版本的ncurses
a) 下载ncurses-5.6.tar.gz
b) 解压到/opt/中:tar zxvf ncurses-5.6.tar.gz
c) cd ncurses-5.6
d) ./configure -–host=arm-linux --prefix=/usr/local/ncurse -–enable-static
e) make
f) make install之所以安装这个,是因为对mysql的交叉编译过程需要该库的支持
(此步在用sudo make install时出错,原因是环境变量和原来不同了,解决办法:sudo -i;make install)
5) 编译arm版本的mysql
a) tar zxvf mysql-5.1.51.tar.gz
b) cd mysql-5.1.51
c) 修改配置文件:打开configure,可以使用gedit configure 分别在第26453行、 48175行、 48282行、 48485行附近有类似代码:
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; then
echo “skip …..!”
#{ { $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
一定注意,这样的代码有4部分,要全部改掉。
d) 配置,直接套用了人家的配置方式:
./configure --host=arm-linux --enable-static --with-named-curses-libs=/usr/local/ncurse/lib/libncurses.a --prefix=/usr/local/mysql --without-debug --without-docs --without-man --without-bench --with-charset=gb2312 --with-extra-charsets=ascii,latin1,utf8
e) 修改opt/mysql-5.1.51/sql/sql_parse.cc:在5646行之前添加#define STACK_DIRECTION 1
如果不修改该语句,则会出现如下错误:sql_parse.cc:5646:21: operator '<' has no left operand,原因是宏变量STACK_DIRECTION没有定义初值,arm中定义STACK_DIRECTION为1。
注意:这里的“#define STACK_DIRECTION 1”一句,不能随便加在sql_parse.cc的开头处,而应该根据出错信息的提示添加在相应的行上,我所遇到的行号和别人文档上所遇到的行号并不相同。
f) 复制PC版本的gen_lex_hash文件到当前文件夹:
cp /opt/mysql-5.1.51-pc/sql/gen_lex_hash sql/
touch –m sql/gen_lex_hash
cp /opt/mysql-5.1.51-pc/sql/ lex_hash.h sql/
touch –m sql/ lex_hash.h
否则会出现错误:
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 因为arm版的无法在pc上运行。
e) 设置密码
#./mysqladmin -u root password 123456
f) 登录MySQL
#./mysql -u root -p
输入密码后就进入到了MySQL
四:测试
进入到MySQL后可以通过如下命令进行测试:
#use test;//使用test数据库
#create table t1(name char(10));//创建表
#insert into t1 values("sun");//插入
#select * from t1;//查询