Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

undefined reference to `i2c_smbus_read_word_data(int, unsigned char)

After updating to Ubuntu 18.04 I can't compile my Qt application.

The following error occurs:

undefined reference to `i2c_smbus_read_word_data(int, unsigned char)

As I understood, i2c_smbus_read_word_data is now defined not in linux/i2c-dev.h, but in dynamic library /usr/lib/x86_64-linux-gnu/libi2c.so.

I tryed to link dynamically:

-li2c

and statically:

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

But I still have compillation error

UPD: libi2c-dev, libi2c0 and i2c-tools packages are installed.

like image 589
vitperov Avatar asked May 03 '18 11:05

vitperov


1 Answers

The smbus include is not C++ "ready" as most C headers for general use are, so it does not have an extern "C" declaration which means the C++ compiler mangles the names and the linking fails.

I beat my head against this for a few hours before I had an accidental insight. I fixed it by wrapping the includes in an extern "C" block and now my program links again.

extern "C" {
    #include <linux/i2c-dev.h>
    #include <i2c/smbus.h>
}
like image 75
r_ahlskog Avatar answered Sep 26 '22 12:09

r_ahlskog