远程工作区嵌入式CMake项目clangd头文件与链接修复方案
修复VSCode clangd远程工作区嵌入式CMake项目头文件与链接解析问题
以下是完整的修复步骤:
1. 生成包含隐式目录的编译数据库
在CMakeLists.txt中添加如下配置,生成compilation_database.json并包含编译器隐式包含目录:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(CMAKE_EXPORT_COMPILE_COMMANDS) set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) endif()
2. 调整编译数据库路径与编译器路径
由于原编译器路径无修改权限,将生成的compilation_database.json复制到本地项目根目录,替换其中的编译器路径为本地可访问路径。注意:每次编译数据库更新后需重新执行替换操作,并删除/home/user/.config/clangd文件夹后重启VSCode。
3. 配置clangd扩展参数
修改VSCode的settings.json,添加clangd的关键参数:
"clangd.arguments": [ "-log=verbose", "-pretty", "--background-index", "--query-driver=/home/user/elbe_sdk/sysroots/host/usr/bin/aarch64-linux-gnu-g++", "--compile-commands-dir=/home/user/project/", "--all-scopes-completion" ]
4. 修复编译器的rpath与解释器路径
使用patchelf工具修改交叉编译器aarch64-linux-gnu-g++的rpath和解释器路径,解决clangd无法调用编译器的问题:
patchelf --set-rpath /home/user/elbe_sdk/sysroots/host/usr/lib/x86_64-linux-gnu:/home/user/elbe_sdk/sysroots/host/lib/x86_64-linux-gnu/:/home/user/elbe_sdk/sysroots/host/usr/lib:/home/user/elbe_sdk/sysroots/host/lib aarch64-linux-gnu-g++ patchelf --set-interpreter /home/user/elbe_sdk/sysroots/host/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 aarch64-linux-gnu-g++
5. 调整索引错误限制
在/home/user/.config/clangd/config.yaml中添加如下配置,解决索引时出现的fatal_too_many_errors问题:
CompileFlags: Add: -ferror-limit=0
最后操作
重启VSCode,若之前已有索引数据,需先删除/home/user/.config/clangd文件夹,clangd即可正确解析所有头文件与符号引用。
内容的提问来源于stack exchange,提问作者apfreelance
相关产品推荐
相关产品推荐

