移植mysql5_7,遇到问题,尚未解决

mysql5.7.22移植arm遇到的问题,尚未解决

开发环境:Ubuntu18.04LTS虚拟机
交叉编译工具:使用apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf

第一步,前往https://downloads.mysql.com/archives/>mysql官网下载源码,本人下载的5.7.21不带boost的版本。

参考https://blog.csdn.net/jianhuifu/article/details/58049909>移植MySQL - CSDN博客这篇博客,先编译x86版本。

$ tar zxf mysql-5.5.54.tar.gz
$ mv mysql-5.5.54 mysql-5.5.54-x86
$ cd mysql-5.5.54-x86
$ cmake . # 不需要指定特殊的编译选项
$ make

在cmake的过程中提示下载boost_1_59_0.tar.gz,https://download.csdn.net/download/oscer2016/9854622我是在这下载的,官网貌似也有但是速度慢。
随后cmake成功,然后等了一个多小时编译成功。

第二步,配置arm交叉编译环境,参照那篇配置mips的配置,新建arm.cmake。

SET(CMAKE_SYSTEM_NAME Linux)
# $ENV{OCTEON_ROOT}表示引用环境变量OCTEON_ROOT
SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabihf/)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# 下面两个变量是mysql特有的变量,定义的值需要进行测试确认。
# 测试方法可以在CMakeList.txt中找到
SET(STACK_DIRECTION -1)
SET(CMAKE_BUILD_TYPE RelWithDebInfo)

然后运行cmake,

$ tar zxf mysql-5.5.54.tar.gz
$ cd mysql-5.5.54
$ cmake                             \
-DCMAKE_TOOLCHAIN_FILE=arm.cmake   \ # 指定使用arm交叉工具链交叉编译
-DCMAKE_INSTALL_PREFIX=/usr         \ # mysql在目标文件系统中的安装路径
-DMYSQL_DATADIR=/data               \
-DSYSCONFDIR=/etc                   \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock   \
-DMYSQL_TCP_PORT=3306               \
-DEXTRA_CHARSETS=all                \
-DDEFAULT_CHARSET=utf8              \
-DDEFAULT_COLLATION=utf8_general_ci \
.

然后运行出错,提示找不到boost_1_59_0,然而我明明已经下载好了放到了相应的位置,推测是需要我交叉编译boost,于是百度搜索boost交叉编译。

第三步、移植boost。

参考了这篇博客https://www.cnblogs.com/landy-weiai/p/3660224.html>移植boost_1_55_0至arm的方法小结 - landy_weiai - 博客园。先运行

./bootstrap.sh

然后修改生成的project-config.jam文件
修改五处:

    using gcc : arm : arm-none-linux-gnueabi-gcc ;

   option.set prefix :(交叉编译器所在位置);

   option.set exec-prefix :(交叉编译器所在位置)/bin ;

   option.set libdir :(交叉编译器所在位置)/lib ;

   option.set includedir :(交叉编译器所在位置)/include ;

然后

./b2 
./b2 install

成功安装后,回到正题,这时要将安装的位置加到arm.cmake文件中

SET(CMAKE_FIND_ROOT_PATH /usr/arm-linux-gnueabihf/ <thePathToBoost>)

删除CMakeCache.txt,重新运行cmake,这一次提示不存在ncurses,同样的,交叉编译ncurses,

第三步、移植ncurses

清华镜像开源网站https://mirrors.tuna.tsinghua.edu.cn/gnu/ncurses/下载最新的ncurses-6.1.tar.gz。

./configure --host=arm-linux --prefix=/opt/ncurses CC=arm-linux-gnueabihf-gcc

然后make 以及make install
在make install时出现了一个小问题,
strip: Unable to recognise the format of the input file `/opt/ncurses/bin/tic …….
经百度,原因是make install时 根据PATH设置的路径的先后顺序,选择了x86版的strip,而在这里,需要使用的是arm版的,于是调整顺序。

export PATH=/usr/arm-linux-gnueabihf/bin/:$PATH

然后将位置加到arm.cmake中。
重新运行cmake,
然而不遂人意。
还是报错了

-- INSTALL mysqlclient.pc lib/pkgconfig
-- CMAKE_BUILD_TYPE: RelWithDebInfo
-- COMPILE_DEFINITIONS: _GNU_SOURCE;_FILE_OFFSET_BITS=64;BOOST_GEOMETRY_SQRT_CHECK_FINITENESS;HAVE_CONFIG_H;HAVE_LIBEVENT1
-- CMAKE_C_FLAGS:  -lpthread -lm -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mthumb -Wall -Wextra -Wformat-security -Wvla -Wimplicit-fallthrough=2 -Wwrite-strings -Wdeclaration-after-statement
-- CMAKE_CXX_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Wimplicit-fallthrough=2 -Woverloaded-virtual -Wno-unused-parameter
-- CMAKE_C_LINK_FLAGS: 
-- CMAKE_CXX_LINK_FLAGS: 
-- CMAKE_C_FLAGS_RELWITHDEBINFO: -O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -ffp-contract=off -fno-expensive-optimizations -DDBUG_OFF
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -std=gnu++03 -ffp-contract=off -fno-expensive-optimizations -DDBUG_OFF
-- Configuring incomplete, errors occurred!
See also "/home/bwang/qteverywhere/mysql-5.7/CMakeFiles/CMakeOutput.log".
See also "/home/bwang/qteverywhere/mysql-5.7/CMakeFiles/CMakeError.log".

进入CMakeError.log中,定位到最早的error中

  184 Linking C executable cmTC_15480
  185 /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_15480.dir/link.txt --v      erbose=1
  186 /usr/bin/arm-linux-gnueabihf-gcc      -rdynamic CMakeFiles/cmTC_15480.dir/      CheckSymbolExists.c.o  -o cmTC_15480
  187 CMakeFiles/cmTC_15480.dir/CheckSymbolExists.c.o: In function `main':
  188 CheckSymbolExists.c:(.text+0x2c): undefined reference to `pthread_create'
  189 collect2: error: ld returned 1 exit status
  190 CMakeFiles/cmTC_15480.dir/build.make:97: recipe for target 'cmTC_15480' fa      iled
  191 make[1]: *** [cmTC_15480] Error 1
  192 make[1]: Leaving directory '/home/bwang/qteverywhere/mysql-5.7/CMakeFiles/      CMakeTmp'
  193 Makefile:126: recipe for target 'cmTC_15480/fast' failed
  194 make: *** [cmTC_15480/fast] Error 2

以为是没加-lpthread的原因,

#!/bin/sh
rm CMakeCache.txt
cmake                             \
    -G "Unix Makefiles" \
    -DCMAKE_INSTALL_PREFIX=/opt/mysql-5.7   \
    -DCMAKE_TOOLCHAIN_FILE=arm.cmake   \
    -DEXTRA_CHARSETS=all                \
    -DDEFAULT_CHARSET=utf8              \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DCMAKE_C_FLAGS="${CMAKE_C_FLAGS} -lpthread -lm -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mthumb" 

添加了最下面一行,还是没法解决。于是又去下载了5.6版本也是不行。
最后只能先暂时放弃,还是选择移植5.1版本的mysql,这个的教程也有很多,关键是能够成功移植。

途中还参考了以下博客:
1、https://blog.csdn.net/catemo/article/details/53136343>ubuntu 16.04 交叉编译 mysql 5.7.16 到 arm平台 - CSDN博客
2、http://dp.nonoo.hu/cross-compiling-mysql/> Cross-compiling MySQL at dreamport | nonoo.hu

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章