两年前我写了一篇文章:MySQL5.7源码在MacOS+Clion上的单步调试
今天想在已重装过的MAC电脑上重新走一遍流程,但是遇到了一些问题,最终决定在电脑上编译MySQL8.4.2版本的源码
目录
遇到的问题
在CMake环节遇到了如下报错
CMake Error at cmake/ssl.cmake:273 (MESSAGE):
SSL version must be at least 1.1.1
Call Stack (most recent call first):
CMakeLists.txt:603 (MYSQL_CHECK_SSL)
-- Configuring incomplete, errors occurred!
而我的openssl是通过brew install openssl命令自动安装的,其版本是3.4.0
这里有些纳闷,按理说3.4.0比1.1.1高,难道不能适配?
看下MySQL5.7.40中CMake的源码(文件:cmake/ssl.cmake)
# Static SSL libraries? we require at least 1.1.1
IF(STATIC_SSL_LIBRARY OR (WIN32 AND WITH_SSL_PATH))
IF(OPENSSL_VERSION VERSION_LESS "1.1.1")
RESET_SSL_VARIABLES()
MESSAGE(FATAL_ERROR "SSL version must be at least 1.1.1")
ENDIF()
SET(SSL_DEFINES "-DHAVE_STATIC_OPENSSL")
ENDIF()
这里就不是很清楚了,OPENSSL_VERSION VERSION_LESS “1.1.1”,这句话到底是如何判断的,猜测可能只对1.x版本有效,对于3.x版本会直接认为不兼容
于是乎我希望在本地安装openssl1.1版本,遇到了以下报错
➜ mysql-5.7.40 brew install openssl@1.1
Error: openssl@1.1 has been disabled because it is not supported upstream!
查了下维基百科,目前openssl1.1.1版本已经不维护了。原文链接:https://zh.wikipedia.org/wiki/OpenSSL
为什么选择MySQL源码8.4.2版本
也就是说,我在本地应该只能安装openssl 3开头的版本,那么MySQL5.7版本的源码可能有些落后了,我决定编译更高版本的MySQL源码
源码下载链接:https://downloads.mysql.com/archives/community/
最终决定选择8.4.2版本的源码
原因是8.4.2版本是8开头的版本里的最后一个版本,按理说应该是feature最多、bug相对之前的版本最少得一个版本,而9开头的版本还刚开始,可能不太合适学习源码