You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2中使用Bear生成compile_commands.json失败及解决后疑问

WSL2下Bear生成compile_commands.json时gRPC连接失败的解决与原理

环境

  • 操作系统:WSL2 on Windows11,Ubuntu 22.04.3 LTS x86_64
  • Bear版本:3.0.18(apt安装)

问题

执行bear -- make生成编译数据库时失败,报错:

wrapper: failed with: gRPC call failed: failed to connect to all addresses

生成的compile_commands.json为空,但单独运行make可正常编译:

gcc -Wall -Iinclude src/main.c -o main

项目结构:

.
├── Makefile
├── compile_commands.json
├── include
│   └── inc.h
├── main
└── src
    └── main.c

试过Bear官方排障方案(设置no_proxy=localhost,127.0.0.1、GRPC_DNS_RESOLVER=native,清空http_proxy/https_proxy),均无效,verbose日志显示supervise::Supervisor::Resolve这个gRPC调用失败。

解决办法

编辑Windows用户目录下的.wslconfig文件,启用networkingMode=mirrored:

[experimental]
autoMemoryReclaim=gradual 
networkingMode=mirrored 
dnsTunneling=true 
firewall=true 
autoProxy=true 
sparseVhd=true 

保存后重启WSL2,再执行bear -- make即可正常生成compile_commands.json。

为什么这个修改有效?

Bear的工作原理依赖gRPC进行本地进程间通信,而WSL2默认的NAT网络模式存在以下问题:

  1. NAT模式下WSL2拥有独立的虚拟网络命名空间,本地回环地址(127.0.0.1/localhost)仅在WSL内部生效,但Bear的gRPC调用可能尝试通过Windows主机的网络栈解析本地地址,导致跨命名空间的连接失败。
  2. mirrored网络模式让WSL2直接共享Windows主机的网络栈,WSL的回环地址与主机回环完全映射,消除了网络隔离带来的本地连接障碍,Bear的gRPC进程间通信可以正常建立。

strace的网络跟踪输出也证实了问题核心是本地网络连接失败,mirrored模式从根源上解决了WSL2与主机间的本地网络互通问题。

内容的提问来源于stack exchange,提问作者V Friedrich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:40:08