移植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

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