неопределенная ссылка на `i2c_smbus_read_word_data (int, unsigned char) - PullRequest
0 голосов
/ 03 мая 2018

После обновления до 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.

1 Ответ

0 голосов
/ 12 июля 2018

Smbus include не является C ++ "готовым", как большинство заголовков C для общего использования, поэтому у него нет объявления extern "C", что означает, что компилятор C ++ искажает имена, и связывание не выполняется.

Я ударился головой об это за несколько часов до того, как случайно увидел. Я исправил это, обернув включения в блок extern "C", и теперь моя программа снова связывается.

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