编译Envoy v1.29.1遇线程安全引用返回错误求助
解决Envoy v1.29.1 Clang 18构建时的线程安全编译错误
你遇到的错误是因为Clang 18新增了-Wthread-safety-reference-return警告,而Envoy v1.29.1的代码没有适配这个新的线程安全检查规则——编译器检测到返回central_cache_的引用时,没有持有对应的parent_.lock_锁,直接触发了错误(Envoy构建默认把警告当作错误处理)。
之前你尝试的参数方向不对,给你几个可行的解决办法:
直接关闭该警告(最快解决)
构建命令里添加关闭这个特定警告的参数(注意用-Wno-前缀表示关闭警告),完整命令:bazel build -c opt envoy --config=clang --cxxopt="-Wno-thread-safety-reference-return"你之前加的
-Wthread-safety-reference是开启警告,-Werror是强制把警告转错误,反而会加剧问题,所以要替换成上面的参数。降级到Envoy推荐的Clang版本
Envoy v1.29.x官方兼容的编译器版本是Clang 14-17,Clang 18不在推荐列表里。卸载Clang 18并安装Clang 17,用推荐版本构建能从根源避免这类兼容性问题。修改源码适配检查(不推荐新手)
手动修改source/common/stats/thread_local_store.h第426行的代码:要么确保返回central_cache_引用时持有parent_.lock_锁,要么把返回引用改成返回指针(需保证代码逻辑不受影响)。这个方法需要熟悉Envoy的线程安全设计,容易引入其他问题,谨慎使用。
内容的提问来源于stack exchange,提问作者Aradhya Khandeparker
相关产品推荐
相关产品推荐

