【开发 | 环境配置】解决 VSCode 编写 eBPF 程序找不到头文件

2024-05-25 18:28:41 浏览数 (1)

问题描述:

在使用 vscode 编写 eBPF 程序时,如果不做一些头文件定位的操作,默认情况下头文件总是带有“红色下划线”,并且大部分的变量不会有提示与补全。

在编写代码文件较小时(或者功能需求小时)并不会带来不方便。

但在长时间编写以及多个程序文件都在使用时,无法补全和提示也影响着编程。

解决方案:

应用场景:

VSCode 编辑器、远程连接服务器开发模式、使用 clangd 插件

方案/方法:

> 这里默认已经可以运行 eBPF 程序了。

检查 clang 是否安装
代码语言:javascript复制
sudo apt-get install clang

使用 clang --version 来验证是否安装成功。 

编写 Makefile 文件

可以随便写一个有效的 Makefile 文件。

代码语言:javascript复制
# Makefile
CC=clang
CFLAGS=-I/usr/src/linux-headers-$(shell uname -r)/include -I/usr/src/linux-headers-$(shell uname -r)/include/uapi

all: main.o

main.o: src/main.c
	$(CC) $(CFLAGS) -o main.o -c src/main.c

clean:
	rm -f main.o
安装 bear

bear 工具用于生成 compile_commands.json 文件。可以通过以下命令进行安装:

安装 bear 工具:

代码语言:javascript复制
sudo apt-get install bear
生成 compile_commands.json 文件

在项目的根目录下运行 bear 来生成编译数据库文件。假设你使用的是 make 来构建项目:

代码语言:javascript复制
bear -- make
compile_commands.json 文件

生成的 compile_commands 文件如下所示:

代码语言:javascript复制
[
    {
        "directory": "/home/user/ning_ebpf",
        "command": "clang -I/usr/src/linux-headers-$(uname -r)/include -I/usr/src/linux-headers-$(uname -r)/include/uapi -o main.o -c src/main.c",
        "file": "src/main.c"
    }
]
配置 .clangd 文件

在项目根目录下创建或编辑 .clangd 文件,添加以下内容:

代码语言:javascript复制
CompileFlags:
  Add: 
    - -isystem
    - /usr/src/linux-headers-$(shell uname -r)/include
    - -isystem
    - /usr/src/linux-headers-$(shell uname -r)/include/uapi
配置 VS Code 使用上述生成的 compile_commands.json

确保 compile_commands.json 文件位于项目根目录: compile_commands.json 文件应该位于项目的根目录。VS Code 和 Clangd 会自动查找该文件。

settings.json 中添加以下配置:

代码语言:javascript复制
{
    "clangd.path": "clangd",
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}"
    ]
}

最终配置好后的项目目录如下:

(需要注意的是,这里没有使用项目的编程框架。)

生效与验证
  1. 重启 VS Code: 重启 VS Code 以确保配置生效。
  2. 查看 Clangd 输出: 在 VS Code 的输出窗口中选择 clangd,查看是否有错误信息。 

0 人点赞