为什么windows上的clangd找不到标准头文件



我计划在windows操作系统上使用noevim。我主要使用cpp和安装msys64来获得gcc/g++编译器,gcc工具链位于C:\msys64\mingw64\bin目录下。我将相关路径添加到path变量中。我写了一个简单的你好世界:

```
#include <iostream>
int main (int argc, char *argv[])
{
std::cout << "hello cruel world" << std::endl;
return 0;
}
```

lsp clangd已成功附加到缓冲区,但出现错误"找不到iostream"。lsp.log如下,带有"-log=verbose"选项:

```
[START][2022-05-30 18:40:19] LSP logging initiated
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    "I[18:40:26.219] clangd version 14.0.3 (https://github.com/llvm/llvm-project 1f9140064dfbfb0bbda8e51306ea51080b2f7aac)rnI[18:40:26.221] Features: windows+grpcrnI[18:40:26.221] PID: 12560rnI[18:40:26.221] Working directory: C:\Users\AstrornI[18:40:26.221] argv[0]: C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exernI[18:40:26.221] argv[1]: -log=verbosernI[18:40:26.221] argv[2]: --query-driver=C:\msys64\mingw64\bin\g++.exernI[18:40:26.221] argv[3]: --background-indexrnI[18:40:26.221] argv[4]: --header-insertion=neverrnI[18:40:26.221] argv[5]: --completion-style=detailedrnI[18:40:26.221] argv[6]: --header-insertion-decorators=falsernV[18:40:26.228] User config file is C:\Users\Astro\AppData\Local\clangd\config.yamlrnI[18:40:26.228] Starting LSP over stdin/stdoutrnV[18:40:26.228] <<< {"id":1,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{"callHierarchy":{"dynamicRegistration":false},"offsetEncoding":["utf-8","utf-16"],"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["","Empty","QuickFix","Refactor","RefactorExtract","RefactorInline","RefactorRewrite","Source","SourceOrganizeImports","quickfix","refactor","refactor.extract","refactor.inline","refactor.rewrite","source","source.organizeImports"]}},"dataSupport":true,"dynamicRegistration":false,"resolveSupport":{"properties":["edit"]}},"completion":{"completionItem":{"commitCharactersSupport":true,"deprecatedSupport":true,"documentationFormat":["markdown","plaintext"],"insertReplaceSupport":true,"labelDetailsSupport":true,"preselectSupport":true,"resolveSupport":{"properties":["documentation","detail","additionalTextEdits"]},"snippetSupport":true,"tagSupport":{"valueSet":[1]}},"completionItemKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25]},"contextSupport":false,"dynamicRegistration":false,"editsNearCursor":true},"declaration":{"linkSupport":true},"definition":{"linkSupport":true},"documentHighlight":{"dynamicRegistration":false},"documentSymbol":{"dynamicRegistration":false,"hierarchicalDocumentSymbolSupport":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"hover":{"contentFormat":["markdown","plaintext"],"dynamicRegistration":false},"implementation":{"linkSupport":true},"publishDiagnostics":{"relatedInformation":true,"tagSupport":{"valueSet":[1,2]}},"references":{"dynamicRegistration":false},"rename":{"dynamicRegistration":false,"prepareSupport":true},"signatureHelp":{"dynamicRegistration":false,"signatureInformation":{"activeParameterSupport":true,"documentationFormat":["markdown","plaintext"],"parameterInformation":{"labelOffsetSupport":true}}},"synchronization":{"didSave":true,"dynamicRegistration":false,"willSave":false,"willSaveWaitUntil":false},"typeDefinition":{"linkSupport":true}},"window":{"showDocument":{"support":false},"showMessage":{"messageActionItem":{"additionalPropertiesSupport":false}},"workDoneProgress":true},"workspace":{"applyEdit":true,"configuration":true,"symbol":{"dynamicRegistration":false,"hierarchicalWorkspaceSymbolSupport":true,"symbolKind":{"valueSet":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]}},"workspaceEdit":{"resourceOperations":["rename","create","delete"]},"workspaceFolders":true}},"clientInfo":{"name":"Neovim","version":"0.7.0"},"initializationOptions":{},"processId":13036,"rootPath":"C:\\Users\\Astro","rootUri":"file:///C:/Users/Astro","trace":"off","workspaceFolders":[{"name":"C:/Users/Astro","uri":"file:///C:/Users/Astro"}]}}rnrnI[18:40:26.229] <-- initialize(1)rnI[18:40:26.256] --> reply:initialize(1) 27 msrnV[18:40:26.256] >>> {"id":1,"jsonrpc":"2.0","result":{"capabilities":{"astProvider":true,"callHierarchyProvider":true,"clangdInlayHintsProvider":true,"codeActionProvider":{"codeActionKinds":["quickfix","refactor","info"]},"compilationDatabase":{"automaticReload":true},"completionProvider":{"allCommitCharacters":[" ","\t","(",")","[","]","{","}","<",">",":",";",",","+","-","/","*","%","^","&","#","?",".","=","\"","'","|"],"resolveProvider":false,"triggerCharacters":[".","<",">",":","\"","/","*"]},"declarationProvider":true,"definitionProvider":true,"documentFormattingProvider":true,"documentHighlightProvider":true,"documentLinkProvider":{"resolveProvider":false},"documentOnTypeFormattingProvider":{"firstTriggerCharacter":"\n","moreTriggerCharacter":[]},"documentRangeFormattingProvider":true,"documentSymbolProvider":true,"executeCommandProvider":{"commands":["clangd.applyFix","clangd.applyTweak"]},"hoverProvider":true,"implementationProvider":true,"memoryUsageProvider":true,"referencesProvider":true,"renameProvider":{"prepareProvider":true},"selectionRangeProvider":true,"semanticTokensProvider":{"full":{"delta":true},"legend":{"tokenModifiers":["declaration","deprecated","deduced","readonly","static","abstract","virtual","dependentName","defaultLibrary","usedAsMutableReference","functionScope","classScope","fileScope","globalScope"],"tokenTypes":["variable","variable","parameter","function","method","function","property","variable","class","interface","enum","enumMember","type","type","unknown","namespace","typeParameter","concept","type","macro","comment"]},"range":false},"signatureHelpProvider":{"triggerCharacters":["(",")","{","}","<",">",","]},"textDocumentSync":{"change":2,"openClose":true,"save":true},"typeDefinitionProvider":true,"typeHierarchyProvider":true,"workspaceSymbolProvider":true},"offsetEncoding":"utf-8","serverInfo":{"name":"clangd","version":"clangd version 14.0.3 (https://github.com/llvm/llvm-project 1f9140064dfbfb0bbda8e51306ea51080b2f7aac) windows+grpc x86_64-pc-windows-msvc"}}}rnrn"
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'V[18:40:26.519] <<< {"jsonrpc":"2.0","method":"initialized","params":{}}rnrn'
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'I[18:40:26.519] <-- initializedrnV[18:40:26.519] <<< {"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"languageId":"cpp","text":"#include <iostream>\r\nusing namespace std;\r\n\r\nint main (int argc, char *argv[])\r\n{\r\n  std::cout << \"hello cruel world\" << std::endl;\r\n  return 0;\r\n}\r\n","uri":"file:///C:/Users/Astro/Desktop/main.cpp","version":0}}}rnrnI[18:40:26.519] <-- textDocument/didOpenrn'
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'I[18:40:26.523] Failed to find compilation database for C:\Users\Astro\Desktop\main.cpprnI[18:40:26.523] ASTWorker building file C:\Users\Astro\Desktop\main.cpp version 0 with command clangd fallbackrn[C:\Users\Astro\Desktop]rn"C:\\msys64\\mingw64\\bin\\clang" "-resource-dir=C:\\Users\\Astro\\AppData\\Local\\nvim\\lsp_servers\\clangd\\clangd\\lib\\clang\\14.0.3" -- "C:\\Users\\Astro\\Desktop\\main.cpp"rnV[18:40:26.541] Driver produced command: cc1 -cc1 -triple x86_64-pc-windows-msvc19.20.0 -fsyntax-only -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning "-fcoverage-compilation-dir=C:\\Users\\Astro\\Desktop" -resource-dir "C:\\Users\\Astro\\AppData\\Local\\nvim\\lsp_servers\\clangd\\clangd\\lib\\clang\\14.0.3" -c-isystem "C:\\mingw64\\include" -cxx-isystem "C:\\Program Files\\Intel\\CnC\\1.0.100\\include" -cxx-isystem "C:\\Program Files\\Intel\\oneapi-tbb-2021.1.1\\include" -internal-isystem "C:\\Users\\Astro\\AppData\\Local\\nvim\\lsp_servers\\clangd\\clangd\\lib\\clang\\14.0.3\\include" -internal-isystem "C:/Program Files/Microsoft Visual Studio 10.0/VC/include" -internal-isystem "C:/Program Files/Microsoft Visual Studio 9.0/VC/include" -internal-isystem "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include" -internal-isystem "C:/Program Files/Microsoft Visual Studio 8/VC/include" -internal-isystem "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include" -fdeprecated-macro "-fdebug-compilation-dir=C:\\Users\\Astro\\Desktop" -ferror-limit 19 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.20 -std=c++14 -fdelayed-template-parsing -fcxx-exceptions -fexceptions -faddrsig -x c++ "C:\\Users\\Astro\\Desktop\\main.cpp"rnV[18:40:26.541] Building first preamble for C:\Users\Astro\Desktop\main.cpp version 0rn'
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'V[18:40:26.559] <<< {"id":2,"jsonrpc":"2.0","method":"textDocument/documentHighlight","params":{"position":{"character":2,"line":5},"textDocument":{"uri":"file:///C:/Users/Astro/Desktop/main.cpp"}}}rnrnI[18:40:26.559] <-- textDocument/documentHighlight(2)rnV[18:40:26.559] indexed preamble AST for C:\Users\Astro\Desktop\main.cpp version 0:rn  symbol slab: 0 symbols, 128 bytesrn  ref slab: 0 symbols, 0 refs, 136 bytesrn  relations slab: 0 relations, 24 bytesrnV[18:40:26.561] Built preamble of size 225196 for file C:\Users\Astro\Desktop\main.cpp version 0rn'
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    "V[18:40:26.592] indexed file AST for C:\Users\Astro\Desktop\main.cpp version 0:rn  symbol slab: 1 symbols, 4456 bytesrn  ref slab: 1 symbols, 1 refs, 4256 bytesrn  relations slab: 0 relations, 24 bytesrnV[18:40:26.592] Build dynamic index for main-file symbols with estimated memory usage of 11536 bytesrn"
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    "I[18:40:26.592] --> textDocument/publishDiagnosticsrnV[18:40:26.592] >>> {"jsonrpc":"2.0","method":"textDocument/publishDiagnostics","params":{"diagnostics":[{"code":"pp_file_not_found","message":"'iostream' file not found","range":{"end":{"character":19,"line":0},"start":{"character":9,"line":0}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"ext_using_undefined_std","message":"Using directive refers to implicitly-defined namespace 'std'","range":{"end":{"character":19,"line":1},"start":{"character":16,"line":1}},"relatedInformation":[],"severity":2,"source":"clang"},{"code":"undeclared_var_use","message":"Use of undeclared identifier 'std'","range":{"end":{"character":5,"line":5},"start":{"character":2,"line":5}},"relatedInformation":[],"severity":1,"source":"clang"},{"code":"undeclared_var_use","message":"Use of undeclared identifier 'std'","range":{"end":{"character":41,"line":5},"start":{"character":38,"line":5}},"relatedInformation":[],"severity":1,"source":"clang"}],"uri":"file:///C:/Users/Astro/Desktop/main.cpp","version":0}}rnrnV[18:40:26.592] ASTWorker running Highlights on version 0 of C:\Users\Astro\Desktop\main.cpprnI[18:40:26.592] --> reply:textDocument/documentHighlight(2) 33 msrnV[18:40:26.592] >>> {"id":2,"jsonrpc":"2.0","result":[]}rnrn"
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'V[18:40:26.931] <<< {"id":3,"jsonrpc":"2.0","method":"textDocument/signatureHelp","params":{"position":{"character":2,"line":5},"textDocument":{"uri":"file:///C:/Users/Astro/Desktop/main.cpp"}}}rnrnI[18:40:26.931] <-- textDocument/signatureHelp(3)rn'
[ERROR][2022-05-30 18:40:26] .../vim/lsp/rpc.lua:420    "rpc"   "C:\Users\Astro\AppData\Local\nvim\lsp_servers\clangd\clangd\bin\clangd.exe"  "stderr"    'I[18:40:26.967] --> reply:textDocument/signatureHelp(3) 35 msrnV[18:40:26.967] >>> {"id":3,"jsonrpc":"2.0","result":{"activeParameter":0,"activeSignature":0,"signatures":[]}}rnrn'
```

我尝试过的包括:

  1. 通过cmake工具生成compile_commands.json,失败
  2. 添加CPP_INCLUDE_*系统变量,失败
  3. 我使用.crangd文件配置项目,失败我想主要的问题是clangd找不到include路径,但我找不到解决方案。等待中,朋友们,帮帮我

在Windows上,clangd经常需要使用--query-driver选项才能正常工作。

请参阅https://clangd.llvm.org/troubleshooting#cant-有关更多详细信息,请查找标准库头映射stdioh等。

注意,--query-driver需要与compile_commands.json一起使用,并且--query-driver的参数应与compile_commands.json中命令开头出现的编译器可执行文件的完整路径匹配。

最新更新