Ubuntu 22.04でAzure IoT C SDKがコンパイルできない→対応済みテスト中だった件
当ブログのIoTHubデバイス開発を極めるシリーズ、
- IoTHubデバイス開発を極める - IoT Hub Device SDKのラインナップ
- IoTHubデバイス開発を極める - Azure IoT C SDKsとAzure SDK for Embedded Cの違い
最後の記事が7/31なので、もう20日程度経過している、、、そろそろ次を書かないと。
ということで、Azure VMにUbuntu 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を起票。
すると、即座に返事が!!
「もう作ってあってテスト中だよ。」
テスト中のコードをコンパイル、実行
教えてもらった、テスト中のコードをコンパイル、実行したところ正常に動いた。
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を実行:
まとめ
ただし、むやみにIssue投げないようにしましょう。相手もヒトです。
おまけ
今回のエラー対処の進行中プルリクエストがこれ。
なにを変更しているかというと、、、主に、c-utilityのCMakeLists.txt。
おうぅ、、、-wno-deprecated-declarations
でエラーを抑止していた。
なるほど、互換性維持のために、deprecatedした関数は呼び出しはできるのね。
おしまい。