warning: implicit declaration of function ‘i2c_smbus_write_byte_data’
とあるi2cを使うcコードでコンパイル警告とリンクエラーが出た。
コンパイル警告 warning: implicit declaration of function ‘i2c_smbus_write_byte_data’ warning: implicit declaration of function ‘i2c_smbus_read_byte’ リンクエラー undefined reference to `i2c_smbus_write_byte_data' undefined reference to `i2c_smbus_read_byte'
Debian 8 jessie
では通るがDebian 10 buster
ではダメ。
どうやらi2c-devの仕様が変わった。
linux/i2c-dev.h
がlinux/i2c.h
,i2c/smbus.h
へ分割されたlibi2c-dev
が必要になった (-li2c)
fix
#code + #include <linux/i2c.h> #include <linux/i2c-dev.h> + #include <i2c/smbus.h>
#makefile at24c.out: at24c.o - $(CC) $^ -lrt -o at24c.out + $(CC) $^ -lrt -li2c -o at24c.out
libi2c-dev in buster.. whats changed - Raspberry Pi Forums
linux - Getting linking error for i2c_smbus_read_byte() - Stack Overflow
error: variable ‘std::istringstream in’ has initializer but incomplete type
何エラーか良くわからんかったが、どうやら
std::istringstream
を使うには<sstream>
が必要、ということだった。
ヘッダをインクルードしたら解決した。
error: variable ‘std::istringstream in’ has initializer but incomplete type std::istringstream hoge(fuga);
特定ユーザーでsudoを使えるようにする
(Debian 10 busterで確認)
//rootに移行 $ su rootのパスワード //sudoを入れる # apt-get install sudo //特定ユーザーを追加する # visudo > ユーザー名 ALL=(ALL:ALL) ALL ctrl+x で保存 //使えるよになったか確認する # exit $ sudo -v
wiringPiの手動インストール
公式は開発終了、有志により継続中。公式の最終版は2.50 (Raspberry Pi OS 10 busterまでならパッケージがあるのでそちらを使え)
git clone \ https://github.com/WiringPi/WiringPi.git \ -b final_official_2.50 cd WiringPi ./build
googletestのインストール
バージョンは適宜。mock不要、インストール先指定で。
git clone https://github.com/google/googletest.git -b release-1.12.0 cd googletest mkdir build cd build cmake .. \ -DBUILD_GMOCK=OFF \ -DCMAKE_INSTALL_PREFIX:PATH=/path/to/deploy make make install