静态编译mysql源码
Linux环境
安装OPENSSL
下载openssl-3.4.0源码,编译安装,配置不生成动态库。
sh
./Configure no-shared
make -j20
make install
安装其它依赖
sh
apt install libncurses5-dev
apt install pkg-config
apt install libnss3-dev
下载源码
从 mysql官网 下载源码,选择包含Boost的版本,并解压。
修改CMakeLists.txt
增加如下内容,用来设置boost路径和静态编译mysqld。
txt
SET(WITH_BOOST ./boost/boost_1_59_0)
SET(WITH_STATIC_ANALYSIS OFF)
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -static")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -static")
编译
vsCode打开源码目录,等待cmaketools配置完毕,然后选择编译mysqld。
Windows环境
安装OPENSSL
下载openssl-3.4.0源码,编译安装,配置不生成动态库。安装在C盘根目录中。也可以下载安装包,需要将lib/VC/x64/MT目录下的libcrypto_static.lib、libssl_static.lib复制到lib目录下,并去掉_static后缀。
下载源码
从 mysql官网 下载源码,选择包含Boost的版本,并解压。
修改CMakeLists.txt
增加如下内容,用来设置boost路径和静态编译mysqld。
txt
SET(WITH_BOOST ./boost/boost_1_59_0)
SET(WITH_STATIC_ANALYSIS OFF)
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -static")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -static")
add_compile_options(
/GS- #禁用安全检测
/source-charset:utf-8 #源文件本身的编码
/execution-charset:utf-8 #编译后使用的编码
)
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/execution-charset:utf-8>")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
修改源码
storage/myisam/sort.cc
去掉继承 public std::binary_function<const uchar*, const uchar*, bool>
public增加如下代码:
cpp
// 修改为手动定义函数对象需要的三个类型
typedef const uchar* first_argument_type;
typedef const uchar* second_argument_type;
typedef bool result_type;
sql/json_dom.h
cpp
struct Json_key_comparator
: std::binary_function<std::string, std::string, bool>`
把继承去掉即可。
编译
vs打开build/MySQL.sln,设置为Release,将所有项目的“属性 → C/C++ → 代码生成 → 运行库”设置成“多线程(/MT)”,然后选择编译mysqld。