TiKV 编译失败

【 TiDB 使用环境】 测试
【 TiDB 版本】tikv: origin/release-8.2
【复现路径】

  1. git clone xx
  2. git checkout -b release-8.2 origin/release-8.2
  3. cargo check --workspace

error: failed to run custom build command for librocksdb_sys v0.1.0 (https://github.com/tikv/rust-rocksdb.git#224bed6f)

/home/andy/.cargo/git/checkouts/rust-rocksdb-a9a28e74c6ead8ef/224bed6/librocksdb_sys/rocksdb/encryption/encryption.cc:90:39: error: use of undeclared identifier ‘block_index’; did you mean ‘block_size’?
90 | uint64_t iv_low = initial_iv_low_ + block_index;
| ^~~~~~~~~~~
| block_size
/home/andy/.cargo/git/checkouts/rust-rocksdb-a9a28e74c6ead8ef/224bed6/librocksdb_sys/rocksdb/encryption/encryption.cc:81:16: note: ‘block_size’ declared here
81 | const size_t block_size = BlockSize();
| ^
/home/andy/.cargo/git/checkouts/rust-rocksdb-a9a28e74c6ead8ef/224bed6/librocksdb_sys/rocksdb/encryption/encryption.cc:91:46: error: use of undeclared identifier ‘block_index’; did you mean ‘block_size’?
91 | if (std::numeric_limits<uint64_t>::max() - block_index < initial_iv_low_) {
| ^~~~~~~~~~~
| block_size
/home/andy/.cargo/git/checkouts/rust-rocksdb-a9a28e74c6ead8ef/224bed6/librocksdb_sys/rocksdb/encryption/encryption.cc:81:16: note: ‘block_size’ declared here
81 | const size_t block_size = BlockSize();

还有一些其他的错误, 比如 no matching function for call to ‘bit_cast’ 294 | return bit_cast<int64_t>(ToHost64(bit_cast<uint64_t>(x))); |

我的编译环境:

clang --version
clang version 18.1.6 (Gitee 极速下载/llvm-project 1118c2e05e67a36ed8ca250524525cdb66a55256)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

clang++ --version
clang version 18.1.6 (Gitee 极速下载/llvm-project 1118c2e05e67a36ed8ca250524525cdb66a55256)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

1 个赞

你 clone 的 TiKV 分支不完整或依赖未更新

要先安装依赖

缺少依赖。

安装依赖

RocksDB 依赖 libgflags-devlibsnappy-dev

自己编译就是难

但这也磨练水平

你可以从根本上学到知识

可能是依赖未完全安装,是否有依赖版本不兼容~

我太难了

要么学习,要么得到

1 个赞

经典~

没clone依赖?

这个错误是由于 Clang 18 版本与 TiKV 依赖的 RocksDB 代码不兼容导致的。怀疑方向有两个:

  1. bit_cast 函数调用不匹配。
  2. block_index 变量未声明。
    通常来说,使用 Clang 15 或 16 可以避免这类兼容性问题。TiKV 项目通常会在较新的版本中修复这些编译器兼容性问题,所以也可以考虑使用 TiKV 的发布版本而不是最新的开发版本。
1 个赞

以下思路可以试试看:
1:使用兼容的 Clang 版本。
2:使用系统默认编译器。
3:更新依赖版本。

1 个赞

按他们流程来吗?

看下官方的文档 TiDB 数据库快速上手指南 | TiDB 文档中心

配置参数有问题,重新来一次看看问题

显式指定 C++20 编译标准以支持 bit_cast