因为在Ubuntu20.04中直接使用apt安装mysql-server失败,所以想尝试使用源码编译一下,在mysql官网找源码包进行编译:
我这边选取的是8.0.30版本,boost版本为1.77,注意最好是带boost后缀的,因为boost后缀是mysql必备编译模块。
编译mysql之前需要下载两个必要的软件openssl和ncurses,我用的是openssl-1.1.1q和ncurses6.4,也是下载然后放到
开发板目录下:
编译openssl和ncurses的指令非常简单,但是需要指定编译器,默认直接使用板上gcc编译器即可,将openssl的编译生成文件放到/home/openssl-1.1.1q/build/目录下:
- ./config no-asm shared no-async --prefix=/home/openssl-1.1.1q/build/
- make -j4
- make install
复制代码
能看到生成文件即为成功:
ncurses软件也是类似的配置,将ncurses的编译生成文件放到/home/ncurses-6.4/build/目录下:
- ./configure --prefix=/home/ncurses-6.4/build/ --with-build-cc=gcc
- make -j4
- make install
复制代码
这里需要注意,mysql-server-8.0需要同时引用ncurses库的头文件和静态链接库,所以include目录和lib目录都必须保证生成无错误:
所有前置工作完成后,真正的煎熬开始,编译mysql源码是一个冗长,令人烦躁的过程,其中不乏Cmakefiles和源代码的各种报错,但为了演示编译,还是硬着头皮上,首先是在mysql目录下mkdir生成build文件夹,然后在build文件夹内执行cmake配置操作:
- cmake .. -DCMAKE_INSTALL_PREFIX=/home/mysql-8.0.30/build/ \
- -DMYSQL_DATADIR=/home/mysql-8.0.30/build/data \
- -DSYSCONFDIR=/home/mysql-8.0.30/build/sysconf \
- -DWITH_BOOST=/home/mysql-8.0.30/boost/boost_1_77_0/ \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_PARtiTION_STORAGE_ENGINE=1 \
- -DWITH_FEDERATED_STORAGE_ENGINE=1 \
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
- -DWITH_MYISAM_STORAGE_ENGINE=1 \
- -DENABLED_LOCAL_INFILE=1 \
- -DENABLE_DTRACE=0 \
- -DWITH_UNIT_TESTS:BOOL=OFF \
- -DDEFAULT_CHARSET=utf8mb4 \
- -DDEFAULT_COLLATION=utf8mb4_general_ci \
- -DWITH_DEBUG=1 \
- -DCMAKE_C_FLAGS="-Wno-error -ldl" -DCMAKE_CXX_FLAGS="-Wno-error -ldl" \
- -DCMAKE_SYSTEM_PROCESSOR=ARM \
- -DCMAKE_C_COMPILER=/usr/bin/gcc \
- -DCMAKE_CXX_COMPILER=/usr/bin/g++ \
- -DWITH_SSL=/home/openssl-1.1.1q/build/ \
- -DCURSES_INCLUDE_PATH=/home/ncurses-6.4/build/include/ \
- -DCURSES_LIBRARY=/home/ncurses-6.4/build/lib/libncurses.a
复制代码
执行cmake配置的过程中还有可能会遇到各种cmake内部提示的报错,都需要一一解决,像这种带IF()和ENDIF()开头的判断语句,哪里报错就屏蔽哪里:
使用arm64的编译链编译源码时,还出现了一个致命错误,arm64 GCC_LIB2.7不支持dlopen() dlsys() dlclose()三个用于加载动态链接库的函数,只要出现立马报error,在makefile立马加入-ldl进行外部库引用也不行,这个问题我至今都还解决不了,只能将dlopen() dlsys() dlclose()三个函数出现的一个文件的相应位置屏蔽,编译可以跳过报错了,但是这样子编译生成的库很有可能会出现严重错误,所以在此帖着重说明,也跟
论坛的大佬们求助该问题的解决方案。
最后,受限于米尔MYD-JX8MMA7开发板的内存配置,mysql甚至无法编译成功...在编译途中就卡死,编译进程直接闪退。
0