Skip to content
目录

静态编译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。

技术支持:13352865103(柯工,微信同号);18688783852(柯工)