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等函数名。
卸载这个库后解决问题。