树莓派5使用libgpiod编译GPIO控制C程序遇头文件缺失问题求助
树莓派5 GPIO编程:解决lgpio.h缺失问题
核心问题说明
你当前使用的代码依赖lgpio库,但你之前安装的是libgpiod——这是两个完全独立的GPIO操作库,因此会出现头文件找不到的错误。
如何安装lgpio库(获取lgpio.h)
lgpio是第三方开发的GPIO工具库,需要手动编译安装:
- 先安装编译依赖:
sudo apt update && sudo apt install git build-essential - 获取lgpio源码并编译安装:
安装完成后,git clone https://github.com/joan2937/lg.git cd lg make sudo make installlgpio.h会被放到/usr/local/include目录,编译时编译器可自动识别。
正确编译你的blinky.c代码
你之前的编译命令参数错误,正确命令为:
gcc -o blinky blinky.c -llgpio
注意:库链接参数-llgpio必须放在源文件之后,这是gcc的编译规则要求。
libgpio与libgpiod的区别
- libgpiod:官方推荐的标准库,基于Linux内核的GPIO字符设备接口开发,是树莓派Bookworm等新系统的正统GPIO操作方案,稳定性和兼容性更强。
- lgpio:第三方库,封装了更简洁的API,支持软PWM、中断监听等额外功能,但不属于官方维护范畴。
可选:改用官方libgpiod的示例代码
如果你想切换到官方推荐的libgpiod,可使用以下代码替换你的blinky.c:
#include <stdio.h> #include <stdlib.h> #include <gpiod.h> #include <unistd.h> int main(void) { struct gpiod_chip *chip; struct gpiod_line *line; int ret; // 打开RPi5的GPIO芯片(通常为/dev/gpiochip4) chip = gpiod_chip_open("/dev/gpiochip4"); if (!chip) { perror("Failed to open GPIO chip"); return EXIT_FAILURE; } // 获取GPIO17引脚 line = gpiod_chip_get_line(chip, 17); if (!line) { perror("Failed to get GPIO line"); gpiod_chip_close(chip); return EXIT_FAILURE; } // 将引脚设置为输出模式,初始电平为低 ret = gpiod_line_request_output(line, "blinky", 0); if (ret < 0) { perror("Failed to set line as output"); gpiod_chip_close(chip); return EXIT_FAILURE; } // 循环闪烁 while (1) { gpiod_line_set_value(line, 0); sleep(1); gpiod_line_set_value(line, 1); sleep(1); } // 资源清理(实际循环不会终止,此处仅为代码完整性) gpiod_line_release(line); gpiod_chip_close(chip); return EXIT_SUCCESS; }
编译命令:
gcc -o blinky blinky.c -lgpiod
内容的提问来源于stack exchange,提问作者Seamus
相关产品推荐
相关产品推荐

