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=/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=/data/app/run/mysqld/mysqld.sock -DMYSQL_DATADIR=/data/mariadb_data -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,README.md,README-wsrep,THIRDPARTY} rm -rf bin/data/app/{mysql-test,sql-bench} sed -i 's|/etc/my|/data/app/etc/my|g' bin/data/app/etc/my.cnf
执行命令后,将安装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链接关系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人