kishikawa_kit
2019年6月21日 0時34分
お世話になります。
以前、Armadillo-IoT G3用(Linux8)に、電力量計からRS485通信で取得したデータをC用のAzure IoT device SDKを利用してAzure IoTへ送信するシステムを構築しました。
このたびLinux9に対応する必要が出てきまして、Azure IoT SDKにてビルドを行ったところ以下のようなエラーが発生しました。
----------------------------------------------------
[ 68%] Building C object iothub_client/samples/iothub_client_sample_mqtt/CMakeFiles/iothub_client_sample_mqtt.dir/iothub_client_sample_mqtt.c.o
/home/atmark/work/IoT_SDK/azure-iot-sdk-c/iothub_client/samples/iothub_client_sample_mqtt/iothub_client_sample_mqtt.c: In function 'setup_serial':
/home/atmark/work/IoT_SDK/azure-iot-sdk-c/iothub_client/samples/iothub_client_sample_mqtt/iothub_client_sample_mqtt.c:397:11: error: implicit declaration of function 'cfsetspeed' [-Werror=implicit-function-declaration]
ret = cfsetspeed(&tio, SERIAL_BAUDRATE);
^~~~~~~~~~
cc1: all warnings being treated as errors
----------------------------------------------------
関数 'cfsetspeed'の暗黙の宣言とのエラー内容で、termiosを使用しているので先頭にマクロ_POSIX_SOURCEを定義していますが、これが関係しているのかと調べてみたものの、Cでの開発経験も浅く自力では解決に至りませんでした。
エラーの解決法をご教示ください。
コメント
y.nakamura
中村です。
古い記憶だよりなのですが・・・たしか、
cfsetspeed()はBSDとの互換性のためのものなので、
cfsetspeed()ではなく、送信と受信を別々に設定する
cfsetispeed()とcfsetospeed()を使いなさい、
ってことだったと思います。
ちなみに、cfsetispeed()とcfsetospeed()を使ったソフトを
いろいろ書いてますが、Armadillo-IoTG3の例では、
Debian8/Jessie(linux-3.14)で使っていたコードはそのまま
Debian9/Stretch(linix-4.9)でも問題なくコンパイルできたと
記憶しています。
--
なかむら
kishikawa_kit
kishikawa_kit
2019年6月22日 15時50分
> 関数 'cfsetspeed'の暗黙の宣言とのエラー内容で、termiosを使用しているので先頭にマクロ_POSIX_SOURCEを定義していますが、これが関係しているのかと調べてみたものの、Cでの開発経験も浅く自力では解決に至りませんでした。
なお_POSIX_SOURCEについてはLinux8の時はそれがないと、ビルド時にエラーが発生しておりました。
Linux9ではそれをはずすとエラーが発生しなくなり、正常に動作もしますが、それで本当に問題がないのかがわかりません。