Armadilloフォーラム

cfsetspeedの暗黙の宣言

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での開発経験も浅く自力では解決に至りませんでした。
エラーの解決法をご教示ください。

コメント

> 関数 'cfsetspeed'の暗黙の宣言とのエラー内容で、termiosを使用しているので先頭にマクロ_POSIX_SOURCEを定義していますが、これが関係しているのかと調べてみたものの、Cでの開発経験も浅く自力では解決に至りませんでした。

なお_POSIX_SOURCEについてはLinux8の時はそれがないと、ビルド時にエラーが発生しておりました。
Linux9ではそれをはずすとエラーが発生しなくなり、正常に動作もしますが、それで本当に問題がないのかがわかりません。

中村です。

古い記憶だよりなのですが・・・たしか、
cfsetspeed()はBSDとの互換性のためのものなので、
cfsetspeed()ではなく、送信と受信を別々に設定する
cfsetispeed()とcfsetospeed()を使いなさい、
ってことだったと思います。

ちなみに、cfsetispeed()とcfsetospeed()を使ったソフトを
いろいろ書いてますが、Armadillo-IoTG3の例では、
Debian8/Jessie(linux-3.14)で使っていたコードはそのまま
Debian9/Stretch(linix-4.9)でも問題なくコンパイルできたと
記憶しています。

--
なかむら

中村様

回答ありがとうございます。

おかげさまでcfsetispeed()とcfsetospeed()に置き換えることによってエラーは発生しなくなりました。

ありがとうございました。