【Clickhouse】【系列-调试】windows下用visual studio源码调试

2,034 阅读3分钟

克隆源码

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

image.png

原因是未安装OpenLdap,在下地址: www.maxcrc.de/wp-content/… 安装后直接下一步、下一步完成,然后手动执行命令启动:

cd OpenLdap安装目录
slapd -d 1 -f slapd.conf

等待出现下图即可重新cmake image.png

提示找不到zlib模块

按照以下命令执行,克隆zlib源码,并执行submodule更新命令

git clone https://github.com/madler/zlib.git
git submodule update --init --recursive

执行到CMakeLists.txt的第122行报错:

image.png

该错误原因是未安装nasm。下载地址:www.nasm.us/pub/nasm/re… 下载后直接安装即可。安装后再次cmake

提示找不到Python

image.png

该错误原因是没有安装Python,下载地址: www.python.org/ftp/python/… 下载后直接安装,安装完成后再次cmake

提示不支持Windows

image.png

这里我们打开contrib/libhdfs3-cmake/CMakeLists.txt文件,然后注释第33行后再次cmake

image.png

提示找不到OpenSSL

image.png

这里请使用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,执行过程中如果报错:

image.png

则需要在Visual Studio上安装英文的语言包。找到VS的安装目录installer,执行vs_installer.exe,选择安装的版本后的修改,再选择语言包,勾选上英文,确认修改。

image.png

image.png

详细安装步骤参考:blog.csdn.net/tutucoo/art…

VS的英文语言包安装完成后,再次执行vcpkg install openssl:x64-windows,出现以下信息即可:

image.png

最后将安装的OpenSSLbin目录(在vcpkg安装目录下)vcpkg\installed\x64-windows\bin加入到系统环境变量中,最后再次cmake

cmake成功

看到以下信息就表示我们编译成功了~~~

image.png

执行ninja命令报错

cmake ..执行成功后,接着我们需要执行ninja clickhouseWindows下该命令会遇到一系列问题。

Windows下没有ThIRDPART_HOME目录,因此,在contrib/rocksdb/thirdparty.inc编译时会提示多个包不存在:

image.png image.png image.png

出现以上类似的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的成员:

image.png

这是因为在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/

image.png

然而。。。安装了cygwin后,问题更艰难了。。。

。。。

过程很凄惨、结局很光明

好吧,最后我放弃了。在Windows上调试Clickhouse恐怕难度不小。我转Linux了。安装了VirtualBox虚拟机,并启动了一个Ubuntu系统,然后按照官网教程,很快就在跑ninja clickhouse命令了,而且基本没有出现什么问题。就是这个命令执行时间有点长,已经跑了1个多小时了,这里需要注意一个点,就是ulimit -n需要做个调整,默认1024太小了,设置一下ulimit -n 10240,否则可能中途会中断。ninja命令中断后再次执行会继续!!Nice啊!。。。

image.png