前言背景

考虑到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

特别注意

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

开始步骤:

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

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

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

     

arm 安装mysql8 依赖包 mysql for arm_mysql

 

        因为移植过程中会需要用到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的目录也可)

         

arm 安装mysql8 依赖包 mysql for arm_交叉编译_02

 

        1.5 ./compile-pentinum64

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

        

arm 安装mysql8 依赖包 mysql for arm_arm_03

 

         Apt-get install libncurses5-dev

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

        等待编译完成即可。

        PC端编译完成

        

arm 安装mysql8 依赖包 mysql for arm_交叉编译_04

 

        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/

        

arm 安装mysql8 依赖包 mysql for arm_mysql_05

 

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++

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_06

 

2.5 编译:

Make

 

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_07

2.6 安装:

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

arm 安装mysql8 依赖包 mysql for arm_mysql_08

编译最后会报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

arm 安装mysql8 依赖包 mysql for arm_mysql_09

 

3.6  chmod  755 ./compile-arm

3.7  ./compile-arm

3.8 配置成功

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_10

 

3.9Make

        3.9.1可能会报错

       

arm 安装mysql8 依赖包 mysql for arm_arm_11

        

 

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

           touch ./extra/comp_err

3.9.2 继续make

         

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_12

 

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

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

  3.9.3继续make

         

arm 安装mysql8 依赖包 mysql for arm_交叉编译_13

 

        执行:这个问题比较复杂

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

        

arm 安装mysql8 依赖包 mysql for arm_arm_14

  

 

        将IB_STRONG_MEMORY_MODEL改为HAVE_ATOMIC_BUILTINS

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

        

arm 安装mysql8 依赖包 mysql for arm_arm_15

 

        1.将HAVE_IB_ATOMIC_PTHREAD_T_GCC改为HAVE_ATOMIC_BUILTINS

        2.将HAVE_GCC_SYNC_BUILTINS改为HAVE_ATOMIC_BUILTINS

#define IB_STRONG_MEMORY_MODEL  后面加

               #else

               #define HAVE_ATOMIC_BUILTINS

        3.9.4 继续make

        

arm 安装mysql8 依赖包 mysql for arm_交叉编译_16

 

 

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

                  touch ./sql/gen_lex_hash

         3.9.5 继续make

         

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_17

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

                  touch scripts/comp_sql

        3.9.6 继续make

        

arm 安装mysql8 依赖包 mysql for arm_mysql_18

 

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

                  touch sql/gen_lex_token  

           3.9.7 继续make

           

arm 安装mysql8 依赖包 mysql for arm_交叉编译_19

 

        执行:

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

                 touch extra/protobuf/protoc

        3.9.8 继续make

        

arm 安装mysql8 依赖包 mysql for arm_交叉编译_20

 

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

        3.9.9 install安装

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

        

arm 安装mysql8 依赖包 mysql for arm_mysql_21

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

        

arm 安装mysql8 依赖包 mysql for arm_arm 安装mysql8 依赖包_22

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

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

        

arm 安装mysql8 依赖包 mysql for arm_arm_23

        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

arm 安装mysql8 依赖包 mysql for arm_mysql_24

 

番外解释:

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

arm 安装mysql8 依赖包 mysql for arm_数据库_25