克隆源码
git clone --recursive https://github.com/yandex/ClickHouse.git
安装VS 2019
略
执行camke
进入到Clickhouse
目录,创建build
文件夹。进入build
目录,执行cmake .. -DCMAKE_BUILD_TYPE=Debug
。这个命令虽简单,但是在Windows
下,可能会出现很多问题。我们接下来一一解决。
提示Cannot enable LDAP support
原因是未安装OpenLdap
,在下地址:
www.maxcrc.de/wp-content/…
安装后直接下一步、下一步完成,然后手动执行命令启动:
cd OpenLdap安装目录
slapd -d 1 -f slapd.conf
等待出现下图即可重新cmake
提示找不到zlib
模块
按照以下命令执行,克隆zlib
源码,并执行submodule
更新命令
git clone https://github.com/madler/zlib.git
git submodule update --init --recursive
执行到CMakeLists.txt
的第122
行报错:
该错误原因是未安装nasm
。下载地址:www.nasm.us/pub/nasm/re…
下载后直接安装即可。安装后再次cmake
。
提示找不到Python
该错误原因是没有安装Python
,下载地址:
www.python.org/ftp/python/…
下载后直接安装,安装完成后再次cmake
提示不支持Windows
这里我们打开contrib/libhdfs3-cmake/CMakeLists.txt
文件,然后注释第33
行后再次cmake
提示找不到OpenSSL
这里请使用vcpkg
工具安装OpenSSL
,安装vcpkg
的操作如下,vcpkg
使用说明请自行Google。
git clone https://github.com/microsoft/vcpkg
cd vcpkg
双击执行 bootstrap-vcpkg.bat # 执行完成后会在同级目录生成vcpkg.exe文件,将其加入到Path中
然后执行命令vcpkg install openssl:x64-windows
安装OpenSSL
,执行过程中如果报错:
则需要在Visual Studio
上安装英文的语言包。找到VS的安装目录installer
,执行vs_installer.exe
,选择安装的版本后的修改,再选择语言包,勾选上英文,确认修改。
详细安装步骤参考:blog.csdn.net/tutucoo/art…
VS的英文语言包安装完成后,再次执行vcpkg install openssl:x64-windows
,出现以下信息即可:
最后将安装的OpenSSL
的bin
目录(在vcpkg
安装目录下)vcpkg\installed\x64-windows\bin
加入到系统环境变量中,最后再次cmake
cmake
成功
看到以下信息就表示我们编译成功了~~~
执行ninja
命令报错
cmake ..
执行成功后,接着我们需要执行ninja clickhouse
。Windows
下该命令会遇到一系列问题。
在Windows
下没有ThIRDPART_HOME
目录,因此,在contrib/rocksdb/thirdparty.inc
编译时会提示多个包不存在:
出现以上类似的xx.lib找不到的错误,需要执行以下全部命令安装c++
库:
vcpkg install gflags:x64-windows
vcpkg install snappy:x64-windows
vcpkg install zlib:x64-windows
vcpkg install zstd:x64-windows
vcpkg install jemalloc:x64-windows
安装完成后,进入contrib/rocksdb/thirdparty.inc
文件,修改多个库的地址:
# 示范:找到下面的定义位置,路径改为vcpkg安装的库的.lib文件路径
set(GFLAGS_LIB_DEBUG xxx/vcpkg/packages/gflags_x64-windows/lib/gflags.lib)
set(GFLAGS_LIB_RELEASE xxx/vcpkg/packages/gflags_x64-windows/lib/gflags.lib)
// 其他几个包类似,可以搜索_LIB_来修改
如果出现下方的错误,提示result_of
不是std
的成员:
这是因为在c++2017以后,已经没有result_of
函数了,改成了invoke_result_t
,所以我们需要进入源码修改,文件为contrib/abseil-cpp/absl/meta/type_traits.h
,修改620
行为:
using result_of_t = typename std::invoke_result_t<T>::type; // 替换原来的result_of
如果出现下列错误,则是因为没有安装cygwin
,下载地址:www.cygwin.com/ :
然而。。。安装了cygwin
后,问题更艰难了。。。
。。。
过程很凄惨、结局很光明
好吧,最后我放弃了。在Windows上调试Clickhouse
恐怕难度不小。我转Linux了。安装了VirtualBox
虚拟机,并启动了一个Ubuntu
系统,然后按照官网教程,很快就在跑ninja clickhouse
命令了,而且基本没有出现什么问题。就是这个命令执行时间有点长,已经跑了1个多小时了,这里需要注意一个点,就是ulimit -n
需要做个调整,默认1024
太小了,设置一下ulimit -n 10240
,否则可能中途会中断。ninja
命令中断后再次执行会继续!!Nice啊!。。。