对 'i2c_smbus_read_word_data(int, 无符号字符)的未定义引用

undefined reference to `i2c_smbus_read_word_data(int, unsigned char)

本文关键字:字符 无符号 int 引用 未定义 data i2c smbus word read      更新时间:2023-10-16

更新到 Ubuntu 18.04 后,我无法编译我的 Qt 应用程序。

发生以下错误:

undefined reference to `i2c_smbus_read_word_data(int, unsigned char)

据我了解,i2c_smbus_read_word_data现在不是在linux/i2c-dev.h中定义的,而是在动态库/usr/lib/x86_64-linux-gnu/libi2c.so中定义的。

我尝试动态链接:

-li2c

和静态:

/usr/lib/x86_64-linux-gnu/libi2c.a

但是我仍然有编译错误

上级: 安装了 Libi2C-dev、Libi2C0 和 I2C-Tools 软件包。

smbus include 不像大多数用于常规用途的 C 标头那样C++"就绪",因此它没有extern "C"声明,这意味着C++编译器会破坏名称并且链接失败。

我愣了几个小时,才有了意外的洞察力。我通过将包含包装在extern "C"块中来修复它,现在我的程序再次链接。

extern "C" {
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}