Clion 如何利用 WSL2 构建 MySQL 5.7 源码阅读环境

开发环境

  • 操作系统:Windows 11 Pro 22H2、WSL2 (Ubuntu-22.04)
  • IDE:CLion 2021.3.4
  • 编译环境:CMake 3.21、gdb 11.1、openssl 1.1.1t & libssl-dev

运行环境构建

下文均通过 {path} 表示执行操作的目录。例如,/{path}/mysql-5.7.39 表示 /home/username/mysql-5.7.39

更新并安装 Linux 基础软件

1
2
3
4
5
6
# 更新可用软件包列表
sudo apt update -y
# 更新已安装的包
sudo apt upgrade -y
# 安装编译 mysql、gdb 依赖的库
sudo apt install build-essential texinfo libncurses-dev bison zlib1g-dev libgmp-dev pkg-config -y

卸载 WSL2 自带的库

某些版本的 WSL2 会预装高版本的 CMake、GDB 等软件,因此首先需要执行以下命令完成卸载:

1
sudo apt remove --purge cmake gdb libssl-dev openssl -y

然后再进行后续的安装过程。

安装 openssl 1.1.1t & libssl-dev

第一个需要安装的是 openssl 库,因为其他组件的安装都会依赖它。

首先,在 WSL2 控制台中输入以下命令,以下载并解压 OpenSSL 的压缩文件:

1
2
wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz --no-check-certificat
tar xzvf openssl-1.1.1t.tar.gz
  • --no-check-certificat:不加这个参数可能会报证书校验失败,这是因为我们一开始卸载了预装的 openssl,所以这里需要跳过 https 证书校验。

然后进入解压后的源码目录,开始编译:

1
2
3
4
5
6
7
8
cd openssl-1.1.1t
# 配置编译选项
./config shared zlib
# 编译
make depend
make
# 安装
sudo make install

最后,创建以下软连接以方便程序的使用:

1
2
sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl/include/openssl /usr/include/openssl

安装 CMake 3.21

首先,在 WSL2 控制台中输入以下命令,以下载并解压 CMake 的压缩文件:

1
2
wget https://github.com/Kitware/CMake/releases/download/v3.21.0-rc2/cmake-3.21.0-rc2.tar.gz
tar xzvf cmake-3.21.0-rc2.tar.gz

然后进入解压后的源码目录,完成安装:

1
2
3
4
5
6
7
cd cmake-3.21.0-rc2
# 配置编译选项
./configure
# 执行编译
gmake
# 执行安装
sudo make install

安装 gdb 11.1

首先,在 WSL2 控制台中输入以下命令,以下载并解压 gdb 的压缩文件:

1
2
wget https://sourceware.org/pub/gdb/releases/gdb-11.1.tar.gz
tar xzvf gdb-11.1.tar.gz

然后进入解压后的源码目录,完成安装:

1
2
3
4
5
6
7
cd gdb-11.1
# 配置编译选项
./configure
# 编译
make
# 安装
sudo make install

CLion 连接 WSL2

首先,需要在 Ubuntu 子系统中下载并解压 MySQL 源代码:

1
2
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.39.tar.gz
tar xzvf mysql-boost-5.7.39.tar.gz

接着,下载并运行以下脚本,以部署可供 Clion 访问的 SFTP 服务器:

1
2
wget https://cdn.jsdelivr.net/gh/JetBrains/clion-wsl@master/ubuntu_setup_env.sh
bash ubuntu_setup_env.sh

然后,在 Clion 中创建一个 CMake 空项目,注意选择版本为 C++11:

创建一个 CMake 空工程

再然后,在 File | Settings | Build, Execution, Deployment | Deployment 设置中,配置连接:

链接 SFTP

并将工程目录映射到 WSL2 的文件系统:

文件映射

最后,在 Clion 中右键点击工程目录,选择 Depolyment | Download from... 从 WSL2 中下载 MySQL 源码:

下载源码到 Windows

到这里,准备工作就完成了,接下来正式编译 MySQL 源码。

配置 Toolchains 与 CMake

首先,我们需要在 File | Settings | Build, Execution, Deployment | Toolchains 设置中新增 WSL2 的编译工具链:

toolchains

需要注意的是,这里使用的 Toolset、CMake 和 Debugger 工具,均是我们上文中安装的。如果这些工具安装失败,这里也会报错。

然后,在 File | Settings | Build, Execution, Deployment | CMake 设置中配置 CMake:

cmake

CMake options 中配置的参数如下:

1
2
3
4
5
6
-DCMAKE_BUILD_TYPE=Debug 
-DWITH_BOOST=/{path}/mysql-5.7.39/boost 
-DCMAKE_INSTALL_PREFIX=build_out 
-DMYSQL_DATADIR=build_out/data 
-DMYSQL_UNIX_ADDR=/{path}/mysql-5.7.39/mysql-debug.sock 
-DSYSCONFDIR=/{path}/mysql-5.7.39/etc
  • {path} 为源码所在的绝对路径。

CMake 并编译工程

保存上述设置后,Clion 会自动 CMake 工程,如果后续需要重新编译,可以右键工程目录点击 “Reload CMake Project” 手动 CMake。

CMake 完成后,在 Clion 中选择 mysqld | Debug 进行构建:

构建

运行 mysqld

构建完成后,打开 MySqld 的 Configuration,在 Program arguments 中临时设置 --initialize-insecure 参数,点击 Run 完成数据库的初始化:

mysqld

初始化完成后,删去 --initialize-insecure 参数,便可以正常运行 MySQL 服务了。

写在最后

通过 WSL2 编译 MySQL 源码的大致流程就是如此,不过你仍有可能在途中遇到跟我不一样的问题。例如 Clion 在配置 Toolchains 与 Cmake 这一步可能无法自动识别所有工具是否安装成功,此时就需要你根据自己的安装路径手动设置了。

之所以这么说是因为我在不同的电脑安装过多次(都是 windows 系统,且都是 wsl2),每次遇到的情况居然也不一样。不过这些问题都还算好解决,遇到了花点时间处理即可!

0%