更新到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软件包。
答案 0 :(得分:4)
smbus包含不是C ++“就绪”的,因为大多数通用的C标头都没有,因此它没有extern "C"
声明,这意味着C ++编译器会破坏名称,并且链接失败。
在经历偶然的洞察力之前,我为此打了几个小时。我通过将包含文件包装在extern "C"
块中进行了修复,现在我的程序再次链接。
extern "C" {
#include <linux/i2c-dev.h>
#include <i2c/smbus.h>
}