mysql交叉编译到ARM平台(hisi)

前言背景

考虑到mysql5.1版本以后编译需要通过cmake,而mysql5.1之前的版本通过./configure就可以,所以这次mysql交叉编译就选择5.1以后的版本5.7.27。由于需要使用交叉编译以后生成的动态库和静态库以及头文件,所以需要使用带有boost的源码包。进入正题:

编译环境:

Ubuntu16.04  64位

交叉编译平台:(海思)

aarch64-himix200-linux

交叉编译工具链:

aarch64-himix200-linux-gcc  aarch64-himix200-linux-g++

交叉编译依赖的库,工具:

Ncurse-6.1

没有cmake工具的需要更新cmake工具:

Apt-get install cmake

参考连接:

编译arm开发板上用的mysql_ls2018536的博客-CSDN博客

Ubuntu16.04进行交叉编译MYSQL5.7.18的具体步骤_haiyangfan的专栏-CSDN博客

error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such_李笑男的博客-CSDN博客

cannot find -lmysqlclient 的解决方案_hpuzsk的博客-CSDN博客_lmysqlclient

特别注意

由于编译出来的文件比较大,编译之前先预留15G的空间,防止编译过程中因为内存不足编译出错。

开始步骤:

废话不多说直接开始按步骤操作:

1、下载mysql版本mysql-boost.5.7.27.tar.gz:

      下载地址:MySQL :: Download MySQL Community Server

     

 

        因为移植过程中会需要用到x86环境下生成的工具,所以先编译PC端的mysql。

        1.1 tar -xf mysql-boost-5.7.27.tar.gz

        1.2  cd mysql-5.7.27/

        1.3  cd BUILD/

        1.4 vi compile-pentium64修改参数为(../boost表示上一级目录必须要有boost目录,所以下载源码的时候一定要下载带有boost的源码。或者自行指定有boost的目录也可)

         

 

        1.5 ./compile-pentinum64

        报错如下,根据提示安装需要的工具:

        

 

         Apt-get install libncurses5-dev

        执行完以后继续./compile-pentinum64

        等待编译完成即可。

        PC端编译完成

        

 

        1.6 修改pc编译目录:

        Cd ../../

         mv mysql-5.7.27 mysql-5.7.27-pc  

2.0  交叉编译ncurses-6.1(6.1以下的版本可能不支持aarch64交叉编译)

2.1 下载ncurses-6.1.tar.gz 下载连接:http://mirrors.ustc.edu.cn/gnu/ncurses/

        

 

2.2 解压tar包:

        tar -xf ncurses-6.1.tar.gz

2.3  cd ncurses-6.1/

2.4 配置:

./configure --host=aarch64-himix200-linux  --prefix=/usr/local/ncurses-6.1-arm CC=aarch64-himix200-linux-gcc CXX=aarch64-himix200-linux-g++

 

2.5 编译:

Make

 

2.6 安装:

make install DESTDIR=/usr/local/ncurses-6.1-arm_install

编译最后会报strip的错误,这个不用理会,strip只是剔除一写无关紧要的信息,编译完只要保证安装目录lib下有静态库.a生成即可。

3.0  mysql的交叉编译

3.1重新解压mysql-boost.5.7.27.tar.gz:

        tar -xf mysql-boost-5.7.27.tar.gz

3.2  cd mysql-5.7.27

3.3  mkdir BUILD_ARM

3.4  cd BUILD_ARM

3.5  vi compile-arm

#! /bin/sh

path='dirname $0'

cmake .. -DWITH_DEBUG=0 -DSTACK_DIRECTION=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATIOIN=utf8_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_BOOST=../boost -DCMAKE_CXX_COMPILER=aarch64-himix200-linux-g++ -DCMAKE_C_COMPILER=aarch64-himix200-linux-gcc -DCURSES_INCLUDE_PATH=/usr/local/ncurses-6.1-arm_install/usr/local/ncurses-6.1-arm/include -DCURSES_LIBRARY=/usr/local/ncurses-6.1-arm_install/usr/local/ncurses-6.1-arm/lib/libncurses.a

 

3.6  chmod  755 ./compile-arm

3.7  ./compile-arm

3.8 配置成功

 

3.9Make

        3.9.1可能会报错

               

 

执行:cp ../../mysql-5.7.27-pc/BUILD/extra/comp_err ./extra/

           touch ./extra/comp_err

3.9.2 继续make

         

 

执行:cp ../../mysql-5.7.27-pc/BUILD/libmysql/libmysql_api_test ./libmysql

          touch ./libmysql/libmysql_api_test  (其实touch的作用就是修改一下时间,vi打开保存其实也可以的)

  3.9.3继续make

         

 

        执行:这个问题比较复杂

        3.9.3.1:vi ../storage/innobase/include/os0thread.ic

          

 

        将IB_STRONG_MEMORY_MODEL改为HAVE_ATOMIC_BUILTINS

        vi ../storage/innobase/include/os0atomic.h

        

 

        1.将HAVE_IB_ATOMIC_PTHREAD_T_GCC改为HAVE_ATOMIC_BUILTINS

        2.将HAVE_GCC_SYNC_BUILTINS改为HAVE_ATOMIC_BUILTINS

        3.在#define IB_STRONG_MEMORY_MODEL  后面加

               #else

               #define HAVE_ATOMIC_BUILTINS

        3.9.4 继续make

        

 

 

       执行:cp ../../mysql-5.7.27-pc/BUILD/sql/gen_lex_hash  ./sql/

                  touch ./sql/gen_lex_hash

         3.9.5 继续make

         

        执行:cp ../../mysql-5.7.27-pc/BUILD/scripts/comp_sql ./scripts/

                  touch scripts/comp_sql

        3.9.6 继续make

        

 

        执行:cp ../../mysql-5.7.27-pc/BUILD/sql/gen_lex_token ./sql/

                  touch sql/gen_lex_token  

           3.9.7 继续make

           

 

        执行:

                 cp ../../mysql-5.7.27-pc/BUILD/extra/protobuf/protoc ./extra/protobuf/

                 touch extra/protobuf/protoc

        3.9.8 继续make

        

 

        编译完成,大功告捷!!!

        3.9.9 install安装

        执行:DESTDIR=/opt/mysql_arm_install/ make install

        

        可以看到编译成功后的文件:64-bit ARM aarch64 交叉编译成功   

        

4.0 将编译完成的文件打包拷贝到ARM平台即可

        拷贝的文件包括/bin /include/ lib等

        

        4.0.1:tftp -gr libmysqlclietn.tar.gz 192.168.101.198

        4.0.2:tar -xf libmysqlclietn.tar.gz

        4.0.3:mkdir /usr/local/lib

        4.0.4:cp libmysqlclient.so* /usr/local/lib/

        4.0.5:ln -s libmysqlclient.so.20 /usr/local/lib/libmysqlclient.so.20 软连接

5.0 ubuntu中交叉编译指令:

aarch64-himix200-linux-g++ *.cpp -lpthread  -I /usr/local/mysql_arm/usr/local/mysql/include -L/usr/local/mysql_arm/usr/local/mysql/lib -lmysqlclient -lpthread -lm -lrt -latomic -ldl -o b.out

 

番外解释:

可以看到编译完成后的文件大小占了6.8个G。加上pc端编译至少要预留15G内存

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linuxyxl

感谢支持,您的支持是我的源动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值