未定义对`i2c_smbus_read_word_data(int,unsigned char)的引用

vit*_*rov 6 c++ gcc i2c ubuntu-18.04

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

发生以下错误:

undefined reference to `i2c_smbus_read_word_data(int, unsigned char)
Run Code Online (Sandbox Code Playgroud)

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

我试图动态链接:

-li2c
Run Code Online (Sandbox Code Playgroud)

静态地:

/usr/lib/x86_64-linux-gnu/libi2c.a
Run Code Online (Sandbox Code Playgroud)

但是我仍然有编译错误

UPD:已安装libi2c-dev,libi2c0和i2c-tools软件包。

r_a*_*kog 5

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

在意外了解之前,我将头撞了几个小时。我通过将include包裹在一个extern "C"块中来修复它,现在我的程序再次链接。

extern "C" {
    #include <linux/i2c-dev.h>
    #include <i2c/smbus.h>
}
Run Code Online (Sandbox Code Playgroud)

  • 伙计,这个提示是金子! (3认同)
  • 老实说,这值得喝一杯啤酒! (2认同)