Ubuntu下Vim中ccls无法识别系统库的问题求助
解决Coc插件中ccls/clangd无法找到系统库及compile_commands.json的问题
问题核心
- ccls/clangd无法识别
std::vector等系统标准库符号 - 未正确读取
compile_commands.json,导致第三方库的函数/方法无法被索引
针对性解决方案
1. 修复.ccls文件格式错误
你的.ccls采用了错误的JSON格式,ccls默认使用行式配置语法。将其修改为:
clang++ -std=gnu++17 -xc++
若坚持使用JSON格式,需将文件名改为.ccls.json,内容调整为:
{ "clang": { "args": ["-std=gnu++17"] } }
2. 确保ccls正确定位compile_commands.json
CMake生成的compile_commands.json通常在build子目录,默认扫描逻辑可能无法识别,可通过两种方式修正:
- 方式一:切换Vim工作目录
启动Vim时进入项目根目录,或在Vim内执行::cd /media/romain/Donnees/Programmation/C++/cmake/fxplorer - 方式二:在coc-settings.js中显式指定路径
修改ccls配置,添加编译命令目录的指定:{ "languageserver": { "ccls": { "command": "ccls", "rootPatterns": [".ccls", ".ccls.json", "compile_commands.json"], "filetypes": ["c", "cpp", "c++", "objc", "objcpp"], "initOptions": { "compilationDatabaseDirectory": "build" } } } }
3. 显式指定系统标准库路径(可选)
若仍无法找到系统头文件,可在.ccls中添加系统库路径(替换为你的gcc对应版本路径):
clang++ -std=gnu++17 -xc++ -isystem /usr/include/c++/11 -isystem /usr/include/x86_64-linux-gnu/c++/11
4. 验证ccls加载状态
在Vim中执行 :CocCommand workspace.showOutput ccls,查看日志:
- 确认是否存在
Loaded compilation database from ...条目,验证compile_commands.json是否被正确加载 - 检查是否有路径错误、权限不足等报错信息
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

