Ubuntu 22.04でAzure IoT C SDKがコンパイルできない→対応済みテスト中だった件

当ブログのIoTHubデバイス開発を極めるシリーズ、

最後の記事が7/31なので、もう20日程度経過している、、、そろそろ次を書かないと。

ということで、Azure VMUbuntu 22.04を立てて最新Azure IoT C SDKコンパイルしたところ、OpenSSLのtlsioで多数エラーが発生した。

OpenSSLのtlsioでエラー

コマンド:

sudo apt-get update
sudo apt-get install -y git cmake build-essential curl libcurl4-openssl-dev libssl-dev uuid-dev ca-certificates
git clone -b LTS_07_2022_Ref01 https://github.com/Azure/azure-iot-sdk-c.git
cd azure-iot-sdk-c
git submodule update --init
mkdir cmake
cd cmake
cmake -DCMAKE_BUILD_TYPE=Debug -Dbuild_service_client=OFF -Dbuild_provisioning_service_client=OFF -Duse_amqp=OFF -Duse_http=OFF ..
cd iothub_client/samples/iothub_ll_telemetry_sample
make

コンパイルエラーの画面ショット:

エラーメッセージ(一部):

tlsio_openssl.c:762:9: error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0
tlsio_openssl.c:772:5: error: ‘ENGINE_by_id’ is deprecated: Since OpenSSL 3.0 
tlsio_openssl.c:1058:9: error: ‘TLSv1_2_method’ is deprecated: Since OpenSSL 1.1.0
tlsio_openssl.c:1062:9: error: ‘TLSv1_1_method’ is deprecated: Since OpenSSL 1.1.0
...

どうやら、Ubuntu 22.04のOpenSSLはv3.0.2で、Azure IoT C SDKはこれに対応していないっぽい。

CMakeの画面ショット:

GitHubのIssueを探しても、該当情報が見つからない。

意を決して、Google翻訳をフル活用してIssueを起票。

github.com

すると、即座に返事が!!
「もう作ってあってテスト中だよ。」

テスト中のコードをコンパイル、実行

教えてもらった、テスト中のコードをコンパイル、実行したところ正常に動いた。

dane/openssl3をチェックアウトしてコンパイル:

cd ~/azure-iot-sdk-c
rm -rf cmake
git checkout origin/dane/openssl3
git submodule update --init
mkdir cmake
cd cmake
cmake -DCMAKE_BUILD_TYPE=Debug -Dbuild_service_client=OFF -Dbuild_provisioning_service_client=OFF -Duse_amqp=OFF -Duse_http=OFF ..
cd iothub_client/samples/iothub_ll_telemetry_sample
make

iothub_ll_telemetry_sampleを実行:

まとめ

  • Azure IoT C SDKチーム(←こんなチームがあるのかは知りません)、すばらしい。
  • Google翻訳サイコー

ただし、むやみにIssue投げないようにしましょう。相手もヒトです。

おまけ

今回のエラー対処の進行中プルリクエストがこれ。

github.com

なにを変更しているかというと、、、主に、c-utilityのCMakeLists.txt。

おうぅ、、、-wno-deprecated-declarationsでエラーを抑止していた。

なるほど、互換性維持のために、deprecatedした関数は呼び出しはできるのね。

おしまい。