dbus-sensors与libgpiod

本文介绍了在Windows11环境下,使用VS2022进行跨平台Linux开发时,遇到的dbus-sensors链接gpiod库的问题。问题源于VS2022链接的Fedora39库版本过低,导致找不到相关函数。通过meson和ninja构建并解决链接问题的方法是卸载过旧的libgpiod库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 开发平台

Win11、VS2022、Fedora39。

2 debus-sensors简介

以下摘自openbmc/dbus-sensors: D-Bus configurable sensor scanning applications (github.com)

dbus-sensors is a collection of sensor applications that provide the

xyz.openbmc_project.Sensor collection of interfaces. They read sensor values

from hwmon, d-bus, or direct driver access to provide readings. Some advance

non-sensor features such as fan presence, pwm control, and automatic cpu

detection (x86) are also supported.

3 作业目的

通过VS2022跨平台Linux构建dbus-sensors的x64可执行模块。

4 问题描述

在vs2022中的链接报错如下:

ADCSensor.hpp(47): error : undefined reference to `gpiod::line::operator bool() const'

ADCSensor.hpp:51: undefined reference to `gpiod::line::set_value(int) const'

ADCSensor.hpp:23: undefined reference to `gpiod::find_line(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

都与gpiod有关。

5 解决方法

用meson构建dbus-sensors时自动下载了libgpiod-1.6.3的源码,用ninja编译生成了libgpiod.so和libgpiodcxx.so。

在这两个库中搜到了find_line等函数名。在vs2022中指定链接的也是这两个库。

最终发现,vs2022链接的实际是fedora39中/usr/lib64中的libgpiod,这是通过dnf命令安装的,其版本是2.0.2,库里没有find_line等函数名。

卸载这个库后解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值