C语言 stdio.h和使用clangd LSP的Neovim中的FPU错误



我有一个使用stm32cubemx初始化的stm32f103项目,我使用neovim进行编辑,使用arm-none-eabi-gcc编译代码(使用自动生成的makefile)。

我也安装了clangd LSP,也可以生成compile_commands.json文件。除了有两个错误外,一切正常:

  1. stdio.h文件未找到
  2. 编译器为没有FPU的设备生成FPU指令(check __FPU_PRESENT)

我看了core_cm3.h文件和__FPU_USED是禁用的,这正是clang说的。

/** __FPU_USED indicates whether an FPU is used or not.
This core does not support an FPU at all
*/
#define __FPU_USED       0U

但是我在我的makefile标志中找不到任何使FPU能够编译的行。

# fpu
# NONE for Cortex-M0/M0+/M3
# float-abi

# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

我也注释掉了$(FPU)$(FLOAT-ABI),但是错误仍然存在。虽然我可以毫无问题地编译这个项目(因为gcc没有任何抱怨),但是这些错误还是让我有点紧张。

有办法修复这些错误吗?或者是否有任何基于gcc的lsp可以代替clangd?

在neovim的LSP列表中也有ccls,但是我无法安装它。

有办法修复这些错误吗?

https://clangd.llvm.org/config#files可以:

  • 创建clangd配置文件
  • 指定-sysroot命令指定您的构建链(/usr/arm-none-eabi/在我的系统)的位置
  • 和其他需要的选项(-isysroot-nostdlib等),如果你使用它们。

我建议无论如何移动CMake和生成compile_command。json。

是否有任何基于gcc的lsp来代替clangd?

我不知道。

最新更新