tikv的client-c源码加单元测试编译选项,最后编译失败的问题求助

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述

【应用框架及开发适配业务逻辑】

【背景】 tikv的client-c代码直接cmake默认编译无问题,但是用这个命令cmake -DENABLE_TESTS=ON … 编译到百分100最后出现一堆grpc相关的错误,有大佬遇到吗怎么解决啊

【现象】 业务和数据库现象

【问题】 tikv的client-c代码直接cmake默认编译无问题,但是用这个命令cmake -DENABLE_TESTS=ON … 编译到百分100最后出现一堆grpc相关的错误,有大佬遇到吗怎么解决啊

【业务影响】

【TiDB 版本】

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

我试了一下 mac 本地编译没有问题,把 build 目录清空重新 cmake -DENABLE_TESTS=ON 再 make 试试?

就是清空 编译的 大佬您那边是root用户编译的吧 其他grpc poco库提前安装到系统目录的吗,我这边是非root账号下面拉的代码,然后根据cmake报错重新编译安装到自定义目录然后再cmake目录的find_xxx.cmake文件里指定prefix的目录,最后再cmake编译的。

大佬 可否加个微信 详细请教下 我们在搞国产化存储相关的

我在 centos 7 服务器上的环境是拉了 grpc(v1.26),protobuf(v3.8.0),poco(poco-1.9.0-release) 手动 make install 的。你的 grpc 库的版本是什么呢?编译命令是怎么样的?

额 那你应该默认就是root用户编译的 我这边grpc是git上拉的最新的master poco也是,grpc编译命令是cmake …/… -DgRPC_INSTALL=ON
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/home/zhangzhiliang/testDemo/grpc/cmake/build
-DgRPC_ABSL_PROVIDER=module
-DgRPC_CARES_PROVIDER=module
-DgRPC_PROTOBUF_PROVIDER=module
-DgRPC_RE2_PROVIDER=module
-DgRPC_SSL_PROVIDER=module
-DgRPC_ZLIB_PROVIDER=module
对了 你client-c目录里cmake的find_grpc.cmake那几个文件里find会报错吧,如果不修改的话,我这边是find_packet前面加了行CMAKE_PREFIX_PATH指定的grpc安装的include lib等目录,大佬可以加我微信详细讨论下吗,多谢

不好意思,我发现用 centos 7 编译的时候没有加 -DENABLE_TESTS=ON,刚才加了之后发现有一样的报错,之前我本地 mac 编译 test 没问题。我们后面研究一下为啥再给你答复。
我是直接把 grpc make install 到系统目录的所以没有修改 find_grpc.cmake,你这个修改也没啥问题。

另外,技术问题还是在这里讨论比较好,这样可以沉淀下来给其他小伙伴作为一个参考。

好的 那加上 -DENABLE_TESTS=ON也出现问题 和我这边应该一个问题了,不加的话 默认我这也可以编译过的

可以尝试一下把 grpc 编译成动态链接库(cmake 参数增加 -DBUILD_SHARED_LIBS=ON), 我这边修改完之后就能编过了。

静态链接编不过的问题我后面会修一下。

好的 多谢

再问下 client-c这个增删查就这几个接口 而且没有返回值 都是void,在生产上怎么用呢,不知道事务或者set是否真正操作成功了,没有这些评审时 领导那边过不去。。

大佬 把grpc重新编译成动态库后,在编译client-c项目最后出现如下这个错误:


你那边还有其他特殊的地方吗

client-c 是通过异常去传递错误的,所以使用上是需要 try catch 的。不过不建议使用 client-c 去增删查,这些接口很久都没有维护了。目前 client-c 只使用于 tiflash 给其他 tiflash 做 coprocessor read 还有就是发给 tikv resolve lock。

没有其他特殊地方。看起来是缺少 libabsl_synchronization.so,话说编译 grpc 的时候有没有 git submodule update --init --recursive?

有的 这个库我都看到有了

需要在 cmakefile 里增加一些 absl 的 link libraries,我这边使用的 grpc 版本是 1.26,默认不依赖 abseil,所以不需要 link 这些也能编过。

这个加上 最后还有别的错误 我这边再阿里云上新整了一遍 单元测试也编译过了 但是直接用libkv_client引用到测试程序 由问题 这个折腾死了 建议官方把静态编译的都搞下在加个使用文档,用这个client的话 门槛太高了而且错误的一头雾水。。

还有就是编译出来的libkv_client.a静态库 我写测试程序连接编译成可执行程序无法使用 显示一堆未定义的错误 是因为编译client-c时grpc是动态库引起的冲突吗 你那边可以试下是否这种用法可以使用