tiflash源码编译报错

【tiflash使用环境】 Linux release 8.7/linux kernel 5.18.19
【tiflash 版本】v7.3.0
【复现路径】克隆源代码后,下载依赖,执行命令 cmake … -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_C_COMPILER=/usr/bin/clang-14 -DCMAKE_CXX_COMPILER=/usr/bin/clang+±14 -DCMAKE_BUILD_TYPE=RELWITHDEBINFO -DENABLE_TESTING=OFF -DENABLE_TESTS=OFF -DENABLE_FAILPOINTS=OFF -DJEMALLOC_NARENAS=-1 -Wno-dev -DUSE_CCACHE=OFF -DUSE_INTERNAL_SSL_LIBRARY=ON -DRUN_HAVE_STD_REGEX=0 -DTHINLTO_JOBS=224 -DENABLE_PCH=ON
【遇到的问题:问题现象及影响】使用上述命令编译v6.5.1版本就没有问题,在v7.3.0就编译不过,大家在编译tiflash源码的时候,是通过什么方式编译的。
【资源配置】

https://github.com/pingcap/tiflash/tree/master/contrib

contrib目录下大部分都是直接引用了其他项目。
你当初可以编译过去,现在不行了。是因为fmtlib这个包原来有bug,更新过。
相关issue:
https://github.com/pingcap/tiflash/issues/6149

你现在编译不过去的原因我看不出来,因为你的报出来的堆栈信息还不全。
至少我可以肯定的是,compile.h应该不是问题所在,因为根据关联的fmtlib版本来看,这个文件2年没有更新了。不太可能突然就不行了。

https://github.com/fmtlib/fmt/tree/b6f4ceaed0a0a24ccf575fab6c56dd50ccf6f1a9/include/fmt

我觉得你可以尝试按照提示,设置use -ftemplate-backtrace-limit= to see all
看看最后的报错信息指向那个文件,这个文件是否更新过,可能会有些头绪。

或者尝试在现有编译器参数的情况下单独编译fmtlib,如果fmtlib这个项目单独编译没有问题,整合进tiflash也不会有问题。

我尝试过对fmtlib单独编译,没有问题,在tiflash整体编译过程中fmtlib库也编译出来了,所以我怀疑是不是其他模块使用fmtlib库,函数调用不当,才导致编译中止。

1 个赞

有点奇怪,报错信息dbms/src目录下的文件内容甚至不涉及调用,就是简单的一个include。就报错了。

https://github.com/fmtlib/fmt/issues/3471

找到一个类似的issue。看上去,这个报错信息的末尾,可能会有些有用的东西。 :fist:

看下cmake的版本,可以先把编译参数整理一下

好的,谢谢,我在看看。

cmake version 3.25.2
上述的编译参数都是从tiflash/release-centos7-llvm/scripts/build-tiflash-release.sh文件中获得的。

前几天刚编译过,或许有点帮助,
官方TiFlash也一直在编译,但你的 os/cmake/clang 版本都不一样,版本对齐下再试试,
如果还不行,建议来这里提问。

好的,除了版本没统一以外,其他操作都保持一致,还是会出现上述问题,我再找找原因。

统一下版本,最好能换个环境重来一次

找到问题原因了,llvm必须手动编译安装,之前我通过yum安装llvm和它的devel包,安装后缺少一个功能库,才导致上面的问题 :sweat:

1 个赞

还有个问题哈,我看了一些文档,其实tiflash脱胎于clickhouse,clickhouse除了系统缓存外,还可配置应用级别的缓存,tiflash是否也有相关参数来调整应用级别的缓存大小。

yum那个不行的,版本和参数都不一定对,手动编下的好