首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能使用clangd读取linux内核代码。

不能使用clangd读取linux内核代码。
EN

Stack Overflow用户
提问于 2022-01-23 03:56:08
回答 2查看 1.4K关注 0票数 4

我有一些关于Linux内核驱动程序的代码。我使用bear 来生成compile_commands.json。

这是我的一些compile_commands.json:

代码语言:javascript
运行
复制
"directory": "/usr/src/linux-headers-5.4.0-90-generic",
"file": "../../../home/ubuntu/programs/linuxKLearn/2/2.1/PrintingDriver/DriverFileOperations.c"

这是我的Makefiles:

代码语言:javascript
运行
复制
ifneq ($(KERNELRELEASE),)
    obj-m := PrintModule.o
    PrintModule-objs := DriverMain.o DriverFileOperations.o
EXTRA_CFLAGS := -DTEST_DEBUG -ggdb -O0
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    rm *.order *.symvers *.mod.c *.o .*.o.cmd .*.cmd .tmp_versions -rf
endif

但是,当我使用Vscode和clangd读取它们时,clangd显示当包含时存在一些问题,问题如下:

代码语言:javascript
运行
复制
Unknown argument: '-mno-fp-ret-in-387'
Unknown argument: '-mpreferred-stack-boundary=3'
Unknown argument: '-mskip-rax-setup'
Unknown argument: '-mindirect-branch=thunk-extern'
Unknown argument: '-mindirect-branch-register'
......

而clangd找不到ssize_t。在这个函数clangd(-Wvisibility)之外,未知类型名 .the inode也有警告声明'struct‘不可见,

如何修复并找到ssize_t?

欢迎所有帮助,谢谢:)

EN

回答 2

Stack Overflow用户

发布于 2022-03-20 00:43:04

你用什么编译器来构建代码?我也遇到了同样的问题,有Clang的建筑似乎解决了这个问题。GCC和Clang有一些只由两个编译器中的一个实现的选项,或者命名不同的选项,因此clangd不理解GCC使用的所有参数。

例如,

代码语言:javascript
运行
复制
make CC=clang defconfig
make CC=clang

或交叉汇编:

代码语言:javascript
运行
复制
make CC=clang ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make CC=clang ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

然后可以运行scripts/clang-tools/gen_compile_commands.py来生成compile_commands.json。在重新启动VSCode或clangd并在项目中打开一个C文件之后,您应该会再次看到索引的开始,而这一次输出中不应该出现任何错误,交叉引用应该在它完成后才能工作。

票数 2
EN

Stack Overflow用户

发布于 2022-10-21 16:45:32

与Clang合作建设肯定是一个解决方案,但有时与GCC一起建设是必要的。在这种情况下,选项是有帮助的。

这是.clangd的一个示例配置,它告诉clangd忽略这些选项,然后警告消失。

代码语言:javascript
运行
复制
CompileFlags:
  Remove: [-fconserve-stack, -fno-allow-store-data-races, -mfunction-return=thunk-extern, -mindirect-branch-cs-prefix, -mindirect-branch-register, -mindirect-branch=thunk-extern, -mskip-rax-setup, -mpreferred-stack-boundary=3, -mno-fp-ret-in-387]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70819007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档