9

更新到 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

但我仍然有编译错误

UPD:安装了 libi2c-dev、libi2c0 和 i2c-tools 软件包。

4

1 回答 1

18

smbus include 不像大多数通用的 C 头文件那样“准备好” C++,因此它没有extern "C"声明,这意味着 C++ 编译器会破坏名称并且链接失败。

在我有一个意外的洞察力之前,我为此苦苦挣扎了几个小时。我通过将包含包装在一个extern "C"块中来修复它,现在我的程序再次链接。

extern "C" {
    #include <linux/i2c-dev.h>
    #include <i2c/smbus.h>
}
于 2018-07-12T06:10:16.513 回答