编译tiflash过程中,发生报错

【 TiDB 使用环境 `】测试环境 ,clang(13.0.0)g++(11.3.0)
【 TiDB 版本】6.1.0
【遇到的问题】make过程编译失败
image

google有些解决办法是说要加#include ,但是仓库的版本都是没有动过的
(为什么要限制,新用户只能放一个图片…)

初步看起来是编译器没有正确包含相关头文件。预期 std::numeric_limits 所在的是文件 limits

在编译目录下的 compile_commands.json 文件中找到 histogram.cc 对应的 command,例如 "command": "/usr/bin/clang++-13 -DTIFLASH_ENABLE_AVX512_SUPPORT ... -std=c++11 ...。找到编译器路径(测试环境是 /usr/bin/clang++-13)和 c++ 版本参数 -std=c++11

用该编译器测试下基本流程是否报错

echo "#include <cstdio>" > /tmp/x.cpp
echo "#include <limits>" >> /tmp/x.cpp
echo 'int main() {  auto _ = std::numeric_limits<int>::max();  std::printf("%ld\\n", __cplusplus);  return 0;}' >> /tmp/x.cpp
/usr/bin/clang++-13 /tmp/x.cpp -o /tmp/x.o -std=c++11 &&  /tmp/x.o

预期是正常编译并输出

201103

建议社区内英文交流以便于所有开发者检索。

It is recommended to communicate in English so that all developers can search it.

image

看起来是没有问题的


我改成c++这里也是可以编译出来的

这个是机器的编译器版本

为啥这里面没有默认使用clang呢?而是使用的c++
我的编译流程就是
make build
cd build
cmake …
make

TiFlash 官方支持 gcc 只到 7.5,建议切换到 llvm 工具链。有 2 种方式:

  1. 查看 which cc,并修改 cc 软链到 clang 相关
  2. TiFlash cmake 编译参数指定编译器;例如 CC=clang CXX=clang++ cmake .... 然后 make ...
1 Like