zoukankan      html  css  js  c++  java
  • MariaDB 10.6.5的交叉编译

    MariaDB的交叉编译

    1.环境

    Host环境:Ubuntu 18.04.5 (PC)

    编译工具链:arm-himix200-linux(解包自arm-himix200-linux.tgz,据说来自Hi3516dv300SDK),海思提供的arm编译工具链

    环境变量:执行命令:export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH

    Nginx目标安装目录:/data/app

    编译器arm-himix200-linux默认输出的ELF格式为private flags = 5000200: [Version5 EABI] [soft-float ABI],与ubuntu-armhf的格式private flags = 5000400: [Version5 EABI] [hard-float ABI]不兼容(soft-float ABI与hard-float ABI的传参规则不一样,因此会不兼容)。

    通过gcc的print-multi-lib查询

    xxx@xxx-HP-ProDesk-480-G5-MT:~/YYY$ arm-himix200-linux-gcc --print-multi-lib
    .;
    armv5te_arm9;@mcpu=arm926ej-s
    a9;@mcpu=cortex-a9
    a7;@mcpu=cortex-a7
    a17;@mcpu=cortex-a17
    a17_a7;@mcpu=cortex-a17.cortex-a7
    a53;@mcpu=cortex-a53
    a73;@mcpu=cortex-a73
    a73_a53;@mcpu=cortex-a73.cortex-a53
    armv5te_arm9_soft;@mcpu=arm926ej-s@mfloat-abi=soft
    armv5te_arm9_vfp;@mcpu=arm926ej-s@mfloat-abi=softfp@mfpu=vfp
    a9_soft;@mcpu=cortex-a9@mfloat-abi=soft
    a9_softfp_vfp;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfp
    a9_softfp_vfpv3-d16;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfpv3-d16
    a9_vfpv3;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfpv3
    a9_vfpv3_neon;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=neon
    a9_hard_neon;@mcpu=cortex-a9@mfloat-abi=hard@mfpu=neon
    a7_soft;@mcpu=cortex-a7@mfloat-abi=soft
    a7_softfp_vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=vfpv4
    a7_softfp_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=neon-vfpv4
    a7_hard_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4
    a17_soft;@mcpu=cortex-a17@mfloat-abi=soft
    a17_softfp_vfpv4;@mcpu=cortex-a17@mfloat-abi=softfp@mfpu=vfpv4
    a17_softfp_neon-vfpv4;@mcpu=cortex-a17@mfloat-abi=softfp@mfpu=neon-vfpv4
    a17_hard_neon-vfpv4;@mcpu=cortex-a17@mfloat-abi=hard@mfpu=neon-vfpv4
    a17_a7_soft;@mcpu=cortex-a17.cortex-a7@mfloat-abi=soft
    a17_a7_softfp_vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=softfp@mfpu=vfpv4
    a17_a7_softfp_neon-vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=softfp@mfpu=neon-vfpv4
    a17_a7_hard_neon-vfpv4;@mcpu=cortex-a17.cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4
    a53_soft;@mcpu=cortex-a53@mfloat-abi=soft
    a53_softfp_vfpv4;@mcpu=cortex-a53@mfloat-abi=softfp@mfpu=vfpv4
    a53_softfp_neon-vfpv4;@mcpu=cortex-a53@mfloat-abi=softfp@mfpu=neon-vfpv4
    a53_hard_neon-vfpv4;@mcpu=cortex-a53@mfloat-abi=hard@mfpu=neon-vfpv4
    a73_soft;@mcpu=cortex-a73@mfloat-abi=soft
    a73_softfp_vfpv4;@mcpu=cortex-a73@mfloat-abi=softfp@mfpu=vfpv4
    a73_softfp_neon-vfpv4;@mcpu=cortex-a73@mfloat-abi=softfp@mfpu=neon-vfpv4
    a73_hard_neon-vfpv4;@mcpu=cortex-a73@mfloat-abi=hard@mfpu=neon-vfpv4
    a73_a53_soft;@mcpu=cortex-a73.cortex-a53@mfloat-abi=soft
    a73_a53_softfp_vfpv4;@mcpu=cortex-a73.cortex-a53@mfloat-abi=softfp@mfpu=vfpv4
    a73_a53_softfp_neon-vfpv4;@mcpu=cortex-a73.cortex-a53@mfloat-abi=softfp@mfpu=neon-vfpv4
    a73_a53_hard_neon-vfpv4;@mcpu=cortex-a73.cortex-a53@mfloat-abi=hard@mfpu=neon-vfpv4
    
    

    所以,所有库的编译都需要修改默认CFLAGS,添加上:

    CFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4"
    

    2.依赖

    mariadb 10.6.5编译时,默认选项,会依赖于如下一些包:zstd、libxml2、jemalloc、ncurses 等等。

    在当前目录中创建一个cross.cmake文件,内容如下:

    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR arm)
    
    set(TOOLCHAIN_PATH "/opt/hisi-linux/x86-arm/arm-himix200-linux")
    set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/bin/arm-himix200-linux-gcc)
    set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/bin/arm-himix200-linux-g++)
    SET(CMAKE_FIND_ROOT_PATH "/data/app")
    

    编译命令如下

    mkdir host && cd host
    cmake ..
    make import_executables
    cd ../
    mkdir build && cd build
    env PKG_CONFIG_LIBDIR=/data/app/lib/pkgconfig/ CFLAGS="-I/data/app/include -I/data/app/include/ncursesw -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 "  CXXFLAGS="-I/data/app/include -I/data/app/include/ncursesw -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 -L/data/app/lib -Wl,--rpath-link=/data/app/lib" cmake -DCMAKE_TOOLCHAIN_FILE=../cross.cmake -DCMAKE_INSTALL_PREFIX=/data/app -DINSTALL_SCRIPTDIR=bin -DINSTALL_SYSCONFDIR=/data/app/etc -DINSTALL_SYSCONF2DIR=/data/app/etc/my.cnf.d -DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock -DINSTALL_PLUGINDIR=lib/mysql/plugin -DINSTALL_SHAREDIR=share -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release -DWITH_UNIT_TESTS=OFF -DENABLED_LOCAL_INFILE=ON -DPLUGIN_EXAMPLE=NO -DPLUGIN_FEDERATED=NO -DPLUGIN_FEEDBACK=NO -DWITH_EMBEDDED_SERVER=ON -DWITH_JEMALLOC=ON -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DSTACK_DIRECTION=-1 -DHAVE_IB_GCC_ATOMIC_BUILTINS=1  -DIMPORT_EXECUTABLES=../host/import_executables.cmake ..
    sed -i 's|&& defined(HAVE_TERM_H)||g' ../client/mysql.cc
    make VERBOSE=1
    make DESTDIR=/XXX install
    cd ../
    rm bin/data/app/{COPYING,CREDITS,INSTALL-BINARY}
    rm -rf bin/data/app/{mysql-test,sql-bench}
    

    执行命令后,将安装mariadb相应的程序、共享库、头文件等至/XXX目录下。

    2.1 libxml2

    下载链接:ftp://xmlsoft.org/libxml2/libxml2-2.9.12.tar.gz

    libxml2依赖于zlib、lzma等库,先编译好相应的依赖库。

    编译命令如下(使用环境变量PKG_CONFIG_LIBDIR,替换系统中默认的pkg-config路径):

    env PKG_CONFIG_LIBDIR=/data/app/lib/pkgconfig/ CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " ./configure --target=arm-himix200-linux- --host=arm-himix200-linux --prefix=/data/app --without-python
    make V=1
    make DESTDIR=/XXX install
    

    执行命令后,将安装libxml2相应的共享库、头文件等至/XXX目录下。

    2.1.1 zlib

    下载链接:http://www.zlib.net/zlib-1.2.11.tar.gz

    编译命令如下(默认会是O3,建议用O2):

    //export CC=arm-himix200-linux-gcc
    env CC=arm-himix200-linux-gcc CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " ./configure --prefix=/data/app
    make
    make DESTDIR=/XXX install
    

    执行命令后,将安装zlib相应的共享库、头文件等至/XXX目录下。

    2.1.2 lzma

    下载链接:https://nchc.dl.sourceforge.net/project/lzmautils/xz-5.2.5.tar.gz

    编译命令如下(默认会是O3,建议用O2):

    env CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " ./configure --target=arm-himix200-linux- --host=arm-himix200-linux --prefix=/data/app
    make
    make DESTDIR=/XXX install
    

    执行命令后,将安装lzma相应的共享库、头文件等至/XXX目录下。

    2.2 zstd

    下载链接:https://github.com/facebook/zstd/releases/download/v1.5.0/zstd-1.5.0.tar.gz

    编译命令如下:

    env CC=arm-himix200-linux-gcc CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " make
    make install prefix=/data/app DESTDIR=/XXX
    

    执行命令后,将安装zstd相应的共享库、头文件等至/XXX目录下。

    2.3 jemalloc

    下载链接:https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2

    编译命令如下:

    sed -i -e 's|-O3|-O2|g' -e 's|-g3|-g|g' ./configure.ac
    sed -i -e 's|-O3|-O2|g' -e 's|-g3|-g|g' ./configure
    env CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " CXXFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" ./configure --target=arm-himix200-linux- --host=arm-himix200-linux --prefix=/data/app --enable-autogen
    make
    make DESTDIR=/XXX install
    

    执行命令后,将安装jemalloc 相应的共享库、头文件等至/XXX目录下。

    2.4 ncurses

    下载链接:https://invisible-mirror.net/archives/ncurses/ncurses-6.3.tar.gz

    ncurses在安装时,会使用编译出来的tic转化terminfo文件,而交叉编译是不能直接运行tic程序的,因此,需要预先编译一个Host上能用的tic程序

    编译命令如下:

    AWK=gawk ./configure --prefix=/data/app/cross-tools --without-debug
    make -C include
    make -C progs tic
    install -v -m755 progs/tic /data/app/cross-tools/bin
    env CFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " CXXFLAGS="-O2 -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4 " LDFLAGS="-mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4" CC=arm-himix200-linux-gcc ./configure --host=arm-himix200-linux --prefix=/data/app --disable-static --with-shared --with-cxx-binding --with-cxx-shared --with-versioned-syms --without-ada --without-debug --with-ticlib --enable-widec
    sed -i 's|${INSTALL} -s|${INSTALL}|g' progs/Makefile
    make V=1
    sed -i 's|TIC_PATH:=tic|TIC_PATH:=/data/app/cross-tools/bin/tic|g' misc/run_tic.sh
    make DESTDIR=/XXX install
    cd bin/data/app/lib
    for lib in ncurses ncurses++ form panel menu; do   printf "INPUT(-l%sw)\n" "${lib}" > "lib${lib}.so"; done
    ln -sv libncurses.so libcurses.so
    

    执行命令后,将安装ncurses 相应的共享库、头文件等至/XXX目录下,同时建立了一些MariaDB所需要的so链接关系。

  • 相关阅读:
    虚拟机中硬盘扩展方法
    ubuntu postgresql install
    vim python
    oe7报表的中文乱码
    文件导入 import
    How do I list user defined types in a SQL Server database
    修改表结构
    查询数据库中所有的表和数据库架构
    Dev chartControl添加提示层信息
    最简单的日志
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/15632454.html
Copyright © 2011-2022 走看看