aarch64 arm上交叉编译mysql-2.7.35
1、准备相应源码
mysql-boost-5.7.35.tar.gz
openssl-1.1.1k.tar.gz
ncurses-6.1.tar.gz
2、编译curses-6.1和openssl-1.1.1k
(1)编译ncurses-6.1
tar xf ncurses-6.1.tar.gz
cd ncurses-6.1
mkdir _install
./configure --host=aarch64-ax630-linux-gnu --prefix=$(pwd)/_install --without-progs CC=aarch64-ax630-linux-gnu-gcc CXX=aarch64-ax630-linux-gnu-g++
make
make install
(2)编译openssl-1.1.1k
tar xf openssl-1.1.1k.tar.gz
cd openssl-1.1.1k
mkdir _install
./config no-asm shared --prefix=$(pwd)/_install --openssldir=$(pwd)/_install
修改Makefile:
CROSS_COMPILE= aarch64-himix100-linux-
删除两处 -m64
make
make install
3、编译mysql-boost-5.7.35.tar.gz
tar xf mysql-boost-5.7.35.tar.gz
cd mysql-boost-5.7.35
(1)编译PC版mysql
mkdir build_x86
cd build_x86
cmake ../ -DCMAKE_INSTALL_PREFIX=/mnt/database/mysql \
-DMYSQL_DATADIR=/mnt/database/mysql/data \
-DWITH_BOOST=/home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0 \
-DSYSCONFDIR=/etc/ \
-DEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=1注:WITH_BOOST为解压后boost的路劲
编译PC版目的,为了产生:
extra/comp_err
scripts/comp_sql
sql/gen_lex_hash
sql/gen_lex_token
extra/protobuf/protoc
libmysql/libmysql_api_test
这6 个文件在编译 arm 版本时需要用到
(2)编译ARM版mysql
A. 修改根目录下的CMakeLists.txt,在文件开始处添加arm交叉编译信息:
IF(1)# this is requiredSET(CMAKE_SYSTEM_NAME Linux)SET(CMAKE_CROSSCOMPILING TRUE)# specify the cross compilerSET(CMAKE_C_COMPILER_WORKS 1)SET(CMAKE_CXX_COMPILER_WORKS 1)SET(CMAKE_C_COMPILER "aarch64-ax630-linux-gnu-gcc")SET(CMAKE_CXX_COMPILER "aarch64-ax630-linux-gnu-g++")# where is the target environment SET(CMAKE_FIND_ROOT_PATH "/opt/arm64/ax630-linaro-7.5.0-2019.12-aarch64-linux-gnu/aarch64-linux-gnu/libc")#SET(CMAKE_FIND_ROOT_PATH "/opt/arm64/ax630-linaro-7.5.0-2019.12-aarch64-linux-gnu")# search for programs in the build host directories (not necessary)SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)# for libraries and headers in the target directoriesSET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)SET(STACK_DIRECTION 1)SET(CMAKE_SYSTEM_PROCESSOR arm)SET(CMAKE_SYSTEM_VERSION 1)SET(CMAKE_CROSSCOMPILING 1)# configure BoostSET(BOOST_INCLUDE_DIR /home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0)SET(LOCAL_BOOST_DIR /home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0)# openssl configurationSET(OPENSSL_INCLUDE_DIR /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/include)SET(OPENSSL_LIBRARY /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib/libssl.so)SET(CRYPTO_LIBRARY /home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib/libcrypto.so)SET(CMAKE_CXX_LINK_FLAGS "-L/home/he_liangbin/gitlab-ax630/mysql/openssl-1.1.1k/_install/lib -lssl -lcrypto")ENDIF()
B. 修改cmake目录下的libevent.cmake:
MACRO(FIND_LIBEVENT_VERSION)IF(0)SET(TEST_SRC"#include <event.h>#include <stdio.h>int main(){fprintf(stdout, \"%s\", LIBEVENT_VERSION);}")FILE(WRITE"${CMAKE_BINARY_DIR}/find_libevent_version.c""${TEST_SRC}")TRY_RUN(TEST_RUN_RESULT COMPILE_TEST_RESULT${CMAKE_BINARY_DIR}"${CMAKE_BINARY_DIR}/find_libevent_version.c"CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${LIBEVENT_INCLUDE_DIRS}"COMPILE_OUTPUT_VARIABLE OUTPUTRUN_OUTPUT_VARIABLE RUN_OUTPUT)ELSE()SET(LIBEVENT_VERSION "2.1.11-stable")SET(COMPILE_TEST_RESULT TRUE)SET(RUN_OUTPUT "2.1.11-stable") ENDIF()# MESSAGE(STATUS "TRY_EVENT TEST_RUN_RESULT is ${TEST_RUN_RESULT}")# MESSAGE(STATUS "TRY_EVENT COMPILE_TEST_RESULT is ${COMPILE_TEST_RESULT}")# MESSAGE(STATUS "TRY_EVENT COMPILE_OUTPUT_VARIABLE is ${OUTPUT}")# MESSAGE(STATUS "TRY_EVENT RUN_OUTPUT_VARIABLE is ${RUN_OUTPUT}")
创建arm编译目录及编译:
mkdir build_arm
cd build_arm
cmake ../ -DCMAKE_INSTALL_PREFIX=/mnt/database/mysql \-DMYSQL_DATADIR=/mnt/database/mysql/data \-DWITH_BOOST=/home/he_liangbin/gitlab-ax630/mysql/mysql-5.7.35/boost/boost_1_59_0 \-DSYSCONFDIR=/etc/ \-DEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_general_ci \-DENABLED_LOCAL_INFILE=1 \-DCURSES_INCLUDE_PATH=/home/he_liangbin/gitlab-ax630/mysql/ncurses-6.1/_install/include \-DCURSES_LIBRARY=/home/he_liangbin/gitlab-ax630/mysql/ncurses-6.1/_install/lib/libncurses.so \-DWITH_LIBEVENT="bundled"make
make之后会产生一系列错误,解决方法如下:
错误一解决办法:
/bin/sh: comp_err / gen_lex_hash / gen_lex_token / comp_sql: not found
cp ../build_x86/extra/comp_err ~/bin/
cp ../build_x86/sql/gen_lex_hash ~/bin/
cp ../build_x86/sql/gen_lex_token ~/bin/
cp ../build_x86/scripts/comp_sql ../scripts/
cp ../build_x86/scripts/comp_sql ~/bin/
cp ../build_x86/extra/protobuf/protoc ~/bin/
注:~/bin 已经添加到PATH目录,如果不是这个目录,需要导出坏境。
错误二解决办法:
/bin/sh: ./libmysql_api_test: cannot execute binary file:
cp ../build_x86/libmysql/libmysql_api_test libmysql/
错误三解决方方法:
mysql-5.7.35/storage/innobase/include/os0atomic.ic:230:2: error: #error "Unsupported platform"
修改storage/innobase/include/os0atomic.ic
line 198:
#elif defined(IB_STRONG_MEMORY_MODEL)
************ to ***************
#elif defined(IB_STRONG_MEMORY_MODEL) || defined (HAVE_ATOMIC_BUILTINS)
修改storage/innobase/include/os0atomic.h
line 64:
#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \|| defined _M_X64 || defined __WIN__#define IB_STRONG_MEMORY_MODEL
#endif************ to ***************#if defined __i386__ || defined __x86_64__ || defined _M_IX86 \|| defined _M_X64 || defined __WIN__#define IB_STRONG_MEMORY_MODEL#else#define HAVE_ATOMIC_BUILTINS#endif
line 265:
# ifdef HAVE_IB_ATOMIC_PTHREAD_T_GCC
#if defined(HAVE_GCC_SYNC_BUILTINS)
# define os_compare_and_swap_thread_id(ptr, old_val, new_val) \os_compare_and_swap(ptr, old_val, new_val)
#else************ to ***************# ifdef HAVE_ATOMIC_BUILTINS
#if defined(HAVE_ATOMIC_BUILTINS)
# define os_compare_and_swap_thread_id(ptr, old_val, new_val) \os_compare_and_swap(ptr, old_val, new_val)
#else
错我修改后一般可以编译过i,编译完成后:
make install
/mnt/database目录下有最终的目标文件
4、移植到板子上测试
由于只需要跑一个mysql服务,因此不需要所有的目标文件都拷贝到板子上
(1)建立目录mysql_lite
mkdir mysql_lite, mysql_lite/bin, mysql_lite/lib
(2)拷贝文件
bin目录:my_print_defaults mysql mysqladmin mysqld mysqld_safe
lib目录:存放ncurses/openssl的库
拷贝启动脚本:mysql.server
(3)创建配置脚本my.cnf(修改为自己路径)
[client]
port = 3306
socket =/var/mysqld/mysqld.sock
[mysqld]
user = root
port = 3306
character-set-server = utf8
#collation-server = utf8_general_ciskip-external-locking
skip-name-resolvebasedir = /mnt/database/mysql/
datadir = /mnt/database/mysql/data
#tmpdir = /mnt/database/mysql/temp
log-error = /mnt/database/mysql/logs/mysql_error.log
pid-file = /var/mysql.pid
socket = /var/mysqld/mysqld.sockperformance_schema_max_table_instances=50
performance_schema = off
table_definition_cache=50
table_open_cache = 64
open_files_limit = 128back_log = 60
max_connections=64
max_connect_errors =128
wait_timeout=60580#open_tables = 600
#table_cache = 650
#opened_tables = 630
#max_allowed_packet = 128ksort_buffer_size = 128k
join_buffer_size = 128k
thread_cache_size = 300query_cache_type = 1
query_cache_size = 1M
query_cache_limit = 1M
#query_cache_min_res_unit = 16ktmp_table_size = 128k
max_heap_table_size = 128k
key_buffer_size = 128k#read_buffer_size = 128k
#read_rnd_buffer_size = 128k#bulk_insert_buffer_size = 128k
#lower_case_table_names=1default-storage-engine = INNODB
innodb_buffer_pool_size = 1M
innodb_log_buffer_size = 128k
innodb_log_file_size = 128k
#innodb_flush_method = O_DIRECT
#####################
#long_query_time= 2
#slow-query-log = off
#slow-query-log-file = /mnt/database/mysql/logs/mysql-slow.log[mysqldump]
quick
max_allowed_packet = 1M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/mysqld.pid
(4)拷贝到板子上
板子创建目录:
mkdir /mnt/database/mysql
mkdir /mnt/database/mysql/data
mkdir /mnt/database/mysql/logs
运行时依赖目录
mkdir /var/log
mkdir /var/mysqld
拷贝mysql_lite目录下的内容到/mnt/database/mysql下
拷贝my.cnf到板子/etc目录下
(5)运行
直接用 root 用户运行,不进行创建用户组,直接初始化
/mnt/database/mysql/bin/mysqld --initialize-insecure --user=root --basedir=/mnt/database/mysql --datadir=/mnt/database/mysql/data
启动服务
/mnt/database/mysql/mysql.server start
此时 mysql 能跑起来,但是用可视化工具去连接发现不让连,可能还需要配置:
/mnt/database/mysql/bin/mysql,输入内容如下:
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
这样远程即可连接
5、参考网站
主要: https://zhuanlan.zhihu.com/p/341840506
主要: https://blog.csdn.net/yangxiangzhan/article/details/105059380
https://www.dazhuanlan.com/alanzxy/topics/1316346
https://blog.csdn.net/fhyocean/article/details/74960005
aarch64 arm上交叉编译mysql-2.7.35相关推荐
- mysql5.1.35_在Windows上安装MySql 5.1.35 Noinstall版
1. 在http://dev.mysql.com/downloads/mysql/5.0.html下载mysql-noinstall-5.0.15-win32.zip. 2. 解压到C:\mysql, ...
- 技术分享 | 国产麒麟 arm 上编译安装 xtrabackup8
作者:王向 爱可生 DBA 团队成员,负责公司 DMP 产品的运维和客户 MySQL 问题的处理.擅长数据库故障处理.对数据库技术和 python 有着浓厚的兴趣. 本文来源:原创投稿 *爱可生开源社 ...
- qt linux wifi,在linux,arm上的屏幕搜索wifi并连接(qt,多选择,wifi按信号排列)转...
先上代码!! #include "widget.h" #include "ui_widget.h" #include #include Widget::Widg ...
- MySQL 5.5.35 单机多实例配置详解
一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...
- 在CentOS上把MySQL从5.5升级到5.6
在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程. 1. 概述 在我做的一个项目中,最近我对生产服务器上的 ...
- MySQL 5.6.35 索引优化导致的死锁案例解析
一.背景 随着公司业务的发展,商品库存从商品中心独立出来成为一个独立的系统,承接主站商品库存校验.订单库存扣减.售后库存释放等业务.在上线之前我们对于核心接口进行了压测,压测过程中出现了 MySQL ...
- OpenCV在ARM上的移植
OpenCV在ARM上的移植 与X86 Linux类似,请参考: Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且 ...
- mysql 5.5.35 单机多实例配置详解_MySQL 5.5.35 单机多实例配置详解
一.前言 二.概述 三.环境准备 四.安装MySQL 5.5.35 五.新建支持多实例的配置文件(我这里配置的是四个实例) 六.初始化多实例数据库 七.提供管理脚本 mysqld_multi.serv ...
- Arm Linux 交叉编译(交叉编译是什么?CROSS_COMPILE)(交叉编译工具链【待更】)
文章目录 交叉编译 1.编译 2.本地编译 3.交叉编译 交叉编译工具链 交叉编译 在嵌入式系统开发中,经常会听到一个词:交叉编译.到底什么是"交叉编译"呢?为什么要使用" ...
- MPlayer在ARM上的移植(S5PV210开发板)
MPlayer 1.0已经把大部分解码库都自带了,如ffmpeg,但是自带的音频库在S5PV210下效果非常不好.换成使用libmad效果不错.因此MPlayer 在ARM-Linux的最简单的移植只 ...
最新文章
- Flatten Nested Arrays(展平嵌套数组)
- Hibernate学习(4)- Hibernate对象的生命周期
- 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_t
- dede 二次开发系统迁移到 IIS 时会出现的问题及解决方案
- ATP检查的一些TIPS
- 初建FreeMarker工程
- C语言 共享库(动态库)制作
- 14.查看信息深入讲解
- Hibernate配置C3P0连接池(在配好基本的hibernate配置下使用)
- Hyper-V常用问题解惑
- 软件工程习题2第三小题
- 遍历hashmap 的四种方法
- apache的开源项目-模板引擎(Velocity)(转)
- z世代消费力白皮书_谁在影响2.6亿年轻人的消费?Z世代消费力白皮书2019|企鹅智库...
- Bert源代码(二)模型
- linux 系统编程--标准IO-缓存
- L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误
- Least Crucial Node UVALive - 7456 【】
- 推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大!
- python zip(*zipped)的疑问
热门文章
- Docker客户端连接Docker Daemon的方式
- 数据库中,什么是事务,事务的特性
- 为Node.js编写组件的几种方式
- 转:开源项目学习方法ABC
- 使用Jorm简单的增删查改数据库
- 2018年视频云服务市场格局进入整合阶段,阿里云视频云位居市场竞争力领导者的位置... 1
- ASP.NET MVC4 乱七八糟罗列
- PHP问题 —— failed to open stream: HTTP request faile
- asp.net 调用echarts显示图表控件随浏览器自适应解决方案
- 深入理解JavaScript内部原理(6): 闭包