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

问题描述 投票:0回答:2

更新到 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 软件包已安装。

c++ gcc i2c ubuntu-18.04
2个回答
24
投票

smbus include 不像大多数通用 C 头文件那样为 C++“准备好”,因此它没有

extern "C"
声明,这意味着 C++ 编译器会破坏名称并且链接失败。

我为此苦苦思索了几个小时,然后才得到了意外的洞察。我通过将包含内容包装在

extern "C"
块中来修复它,现在我的程序再次链接。

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

0
投票

2023年依然好!谢谢 r_ahlskog

© www.soinside.com 2019 - 2024. All rights reserved.