WSL2 を Zed で開き、適当に C++ でコードを書くと次のようなエラーが出ました。
g++ のコンパイルは通るのに...
原因
bits/stdc++.h は C++ の標準ヘッダではなく、GCC の標準ライブラリである libstdc++ が提供する独自のヘッダです。
Zed はエラー検出に clangd という言語サーバーを使用しており、デフォルトでは Zed 自身がダウンロードした clangd が動作します。この clangd はシステムにインストールされた libstdc++ のインクルードパスを認識できないことがあり、その結果 bits/stdc++.h が見つからずエラーになります。
ただし、コンパイル自体は g++ で行えば通ります。
対処法
clangd が g++ のインクルードパスを参照するように設定します。
clangd をインストールする
sudo apt update
sudo apt install clangd
.clangd を配置する
対象のディレクトリ(プロジェクトのルート)に .clangd という名前のファイルを作成し、以下の内容を記述します。
CompileFlags:
Compiler: g++
これにより、clangd が g++ にインクルードパスを問い合わせるようになります。
Zed にシステムの clangd を使わせる
~/.config/zed/ に settings.json を作成し、以下の内容を記述します。
{
"lsp": {
"clangd": {
"binary": {
"path": "/usr/bin/clangd"
}
}
}
}
設定後、Zed を再起動します。
結果
無事エラーが消えました!

