在Oracle Linux 7.5系统上 编译 mysql-8.0.12 debug版本

在Oracle Linux 7.5系统上 编译 mysql-8.0.12 debug版本
这里记录一些主要的步骤。因为是做完了之后才记录的,有些细节可能描述的不清楚。如果大家看了有什么不懂的,可以留言讨论。我看到了会回的。

1.首先就是下载MYSQL-8.0.12 源码包了。我下载的是community 社区GPL版的。官方下载地址https://dev.mysql.com/downloads/mysql/  。
这里Select Operating System要选择    Source code 。Select OS Version需要选择Generic Linux(Architecture Indenpendent)  。这样才能下载下来tar包形式的源码,否则下来是rpm的。

2.解压。并进入目录。
tar -xzpvf mysql-8.0.12.tar.gz
cd mysql-8.0.12

3.创建编译目录。
mkdir bld;cd bld

4.我这里是使用cmake安装的,因此系统上需要安装cmake,make包,如有依赖自行解决。注意需要安装与系统版本和已安装的包兼容的版本。因为我的系统是Oracle Linux 7.5的,所以我下载的rpm包是在这里http://public-yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html

5.先试着编译看看。
cmake .. -LH
执行了这个命令之后,如果有什么错误,会在标准输出中打印出来,对照错误一个一个解决掉。

我在安装的时候,主要有下面几个大的坎。下面说说怎么解决。
    a.    No CMAKE_CXX_COMPILER could be found  错误。这个错误在我这里主要是没有安装g++,gcc编译程序,需要安装gcc.x86_64和gcc-c++.x86_64两个包。并在编译的时候做如下指定:
        cmake .. -LH -DCMAKE_CXX_COMPILER="g++"
    b.    boost的安装。mysql不同版本是要求对应boost的版本的,不能新也不能旧。我这里mysql-8.0.12
        的源码包要求的是boost_1_67_0。具体需要的包版本,你可以先用上面的编译,然后看错误输出会提示。
        各个版本的boost包可以在这里下载https://www.boost.org/users/history/  。
        这里顺便说一下boost的安装。当然你百度也会出来安装方法。这个过程会持续15分钟多。
        tar -xzpvf boost_1_67_0.tar.gz
        cd boost_1_67_0
        ./bootstrap.sh
        ./b2 install --prefix=/usr/local
    c.    gmock和gtest的安装。源码包可以从github上下载。https://github.com/google/googletest/releases 这里注意不要下载master分支的代码,从release下一个最新的就可以了。master分支代码在
        编译安装的时候会报错。也可能我功力不够,大神可以用master编译安装,然后看看如何解决报错的问题。
        这里要特别说一下,结合我对里面的README文件的理解,使用下面的命令安装后,好像不起什么卵用。如果直接make,make instal的话,又会报错。所以我最终也没搞定。所幸这个只是一个测试框架,
        并不影响什么,我就没管了。
        cd /root/googletest-release-1.8.1
        mkdir bld
        export GMOCK_DIR='/root/googletest-release-1.8.1/googlemock'
        export GTEST_DIR='/root/googletest-release-1.8.1/googletest'
        编译gmock
        g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR}  -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc
        g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR}  -pthread -c ${GMOCK_DIR}/src/gmock-all.cc
        ar -rv libgmock.a gtest-all.o gmock-all.o
        rm -fr gtest-all.o gmock-all.o
        编译gtest
        g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} -pthread -c ${GTEST_DIR}/src/gtest-all.cc
        ar -rv libgtest.a gtest-all.o
        将生成的库文件copy到系统lib
        cp *a /usr/local/lib/
        将gmock和gtest的include文件copy到系统include
        cp -a ${GTEST_DIR}/include/* -r /usr/local/include/
        cp -a ${GMOCK_DIR}/include/* -r /usr/local/include/
    d.  记得安装ncurses-devel包
    
    
6.cmake生成编译文件。使用下面的命令。
cmake .. -LH -DCMAKE_CXX_COMPILER="g++"  -DWITH_DEBUG=ON  -DWIN_DEBUG_NO_INLINE=ON     -DWITH_INNODB_EXTRA_DEBUG=ON -DWITH_MSCRT_DEBUG=ON -DWITH_UNIT_TESTS=ON  -DWITH_TEST_TRACE_PLUGIN=ON  -DWITH_NUMA=ON  -DWITH_INNODB_MEMCACHED=ON  -DINSTALL_LAYOUT=TARGZ
上面的编译选项,可以在这里查到。https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html
这里要说明的是,两次cmake之间,需要将上一次cmake生成的临时文件rm -fr 掉,才能继续往下走。因为我是新建了bld目录作为编译目录的,所以我是直接rm -fr *  。
观察上面这个命令的输出,会看到各种报错信息和not found的提示。对于错误信息,需要解决掉,否则不能继续。对于not found,一般是缺了某些包,这些包对应mysql的某些特性,
缺了这些表并不会导致mysql不能运行,而是会导致这些特性不能使用,影响mysql的行为。这也是要尽量解决掉的。而解决方法也简单,装上对应的包,重新cmake就可以了。
这里列出了一些mysql编译必须要安装的包。https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

7.好了,在最后一次啊cmake之后,就到了生成安装包的步骤了。我为了方便使用,直接打了tar.gz包出来,在其他地方直接解压就可以使用。方便。
make package
上面这个命令执行完之后,根据最后一行的输出,可以看到在我的/root/mysql-8.0.12/bld/目录下生成了我需要的gz文件。
.....
Built target my_safe_process
Run CPack packaging tool...
CPack: Create package using TGZ
CPack: Install projects
CPack: - Run preinstall target for: MySQL
CPack: - Install project: MySQL
CPack: Create package
CPack: - package: /root/mysql-8.0.12/bld/mysql-8.0.12-linux-x86_64.tar.gz generated.


最后,贴一个老外写的编译mysql5.6的过程。大家可以观摩。
http://howtolamp.com/lamp/mysql/5.6/installing/

 

有编译好的redhat 7.5 linux 5.7.23和8.0.12,debug版。需要的留邮箱哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值