ubuntu9.04 交叉编译mysql5.5

来源:互联网 发布:多核优化 编辑:程序博客网 时间:2024/06/03 13:27

转载自:http://blog.csdn.net/dlutxie/article/details/8654677

环境:PC机 ubuntu9.04  交叉编译器:gcc-linaro-arm-Linux-gnueabihf-4.7-2013.02-01-20130221_linux,本地gcc: gcc 4.3.3

开发板:OMAP4 cortex-a9  系统:ubuntu12.04

cmake的时候提示我要安装curses库,注意这个库也是要进行交叉编译的,命令如下:

cd   /tmp

tar   xvf  ncurses-5.9.tar.gz

cd ncurses-5.9

./configure  --host=arm-linux-gnueabihf    --enable-widec    --with-shared    --prefix=/opt/ncurses    --with-build-cc=arm-linux-gnueabihf-gcc   --with-build-cc=gcc

make ;  

sudo make install

PS: --enable-widec 这个是增加对宽字符的支持的,生成的库都多了一个w,但为了兼容,最后生成后对每个库文件都建一个软连接,把那个w去掉。

如:ln -sv libncursesw.so.5.9 libncurses.so  ,要不会提示找不着ncurses这个库

接下来就是对mysql5.5进行编译,命令如下:

cd   /tmp

tar    xvf  MySQL-5.5-30.tar.gz

mkdir  mysql-5.5-30-build  #建一个单独的文件夹来进行编译

cd   mysql-5.5-30-build

ccmake   ../mysql-5.5-30   #在这里对一些参数进行配置,具体的请参考文件:http://download.csdn.NET/detail/dlutxie/5125238

可以把这文件直接拷到mysql-5.5-30-build的目录下然后再运行上面的命令,然后修改里面的一些路径即可。

make 

sudo make install

OK,接下来就是在编译过程中可能会遇到的问题如下:

[ 29%] Generating ../include/mysqld_error.h, ../sql/share/english/errmsg.sys..........

/home/xgy/tmp/mysql-5.5.30-bulid/extra/comp_err: 1: Syntax error: word unexpected (expecting ")")

这个可以先看下comp_err这个文件: file   ./extra/comp_err 可以看到,这是一个在ARM平台上执行的文件,所以它是不能在x86平台上运行的,后面还有两个错误和这个是同样的原因,分别是comp_sql与gen_lex_hash这两个文件。网上的很多指导是先编译一个x86平台的mysql然后把相应的文件换过来即可,为了这三个文件何必要整个重编译mysql呢,所以我按照那上面的命令,把编译器修改来本机的gcc,g++而不是交叉编译器,所以就得到了x86平台下的文件了,这三个文件可以在这里下载:http://download.csdn.net/detail/dlutxie/5125215

将x86平台下的comp_err拷到 mysql-5.5.30-bulid/extra/目录下,touch extra/comp_err  修改下时间,然后接着执行:make


[ 69%] Building C object libmysql/CMakeFiles/clientlib.dir/__/sql-common/client_plugin.c.o

client_plugin.c.o   -c /home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c: In function ‘mysql_client_plugin_init’:
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c:252:5: error: incompatible type for argument 5 of ‘add_plugin’
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c:120:1: note: expected ‘va_list’ but argument is of type ‘int’
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c: In function ‘mysql_client_register_plugin’:
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c:310:5: error: incompatible type for argument 5 of ‘add_plugin’
/home/xgy/tmp/mysql-5.5.30/sql-common/client_plugin.c:120:1: note: expected ‘va_list’ but argument is of type ‘int’
make[2]: *** [libmysql/CMakeFiles/clientlib.dir/__/sql-cop

这个问题可以参考:http://sophie.zarb.org/distrib/Mageia/1/i586/media/core-updates-src/by-pkgid/3d9c17c564d30ead0a0dab9855d22f9d/files/27

修改sql-common/client_plugin.c文件

第233行左右

int mysql_client_plugin_init()
 {
   MYSQL mysql;
   struct st_mysql_client_plugin **builtin;
  va_list dummy;   //增加这一行
   if (initialized)

第249行左右

 add_plugin(&mysql, *builtin, 0, 0, 0);  改为:

 add_plugin(&mysql, *builtin, 0, 0,dummy);     //也就是把0改为了dummy

第293行左右:

struct st_mysql_client_plugin *
 mysql_client_register_plugin(MYSQL *mysql,
                              struct st_mysql_client_plugin *plugin)
 {
    va_list dummy;    //增加这一行
   if (is_not_initialized(mysql, plugin->name))
     return NULL;

第307行左右:

   plugin= NULL;
   }
   else
      plugin= add_plugin(mysql, plugin, 0, 0,0);     //删除这一行
       plugin= add_plugin(mysql, plugin, 0, 0, dummy);  增加这一行, 也就是把0改为了dummy


[ 74%] Building CXX object client/CMakeFiles/mysql.dir/sql_string.cc.o

../cmd-line-utils/libedit/libedit.a(terminal.c.o): In function `terminal_deletechars':
/home/xgy/tmp/mysql-5.5.30/cmd-line-utils/libedit/terminal.c:726: undefined reference to `tgoto'
../cmd-line-utils/libedit/libedit.a(terminal.c.o): In function `terminal_set':
/home/xgy/tmp/mysql-5.5.30/cmd-line-utils/libedit/terminal.c:893: undefined reference to `tgetent'
/home/xgy/tmp/mysql-5.5.30/cmd-line-utils/libedit/terminal.c:911: undefined reference to `tgetflag'

解决方法:重新运行 ccmake ../mysql-5.5-30   设置参数 CMAKE_EXE_LINKER_FLAGS  =  -lncurses  注意是 -l是L的小写,然后接着执行:make


[ 74%] Generating mysql_fix_privilege_tables_sql.c

/home/xgy/tmp/mysql-5.5.30-bulid/scripts/comp_sql: 1: Syntax error: word unexpected (expecting ")")
make[2]: *** [scripts/mysql_fix_privilege_tables_sql.c] Error 2

解决方法:将x86平台上的comp_sql文件拷到./srcipts/目录下(先将原来的comp_sql删掉),然后执行:touch  ./srcipts/comp_sql 然后接着执行:make


[ 78%] Generating lex_hash.h
cd /home/xgy/tmp/mysql-5.5.30-bulid/sql && ./gen_lex_hash > lex_hash.h
./gen_lex_hash: 1: Syntax error: word unexpected (expecting ")")
make[2]: *** [sql/lex_hash.h] Error 2

解决方法:将x86平台上的gen_lex_hash文件拷到./sql/目录下(先将原来的gen_lex_hash删掉),然后执行:touch  ./sql/gen_lex_hash 然后接着执行:make