Help us understand the problem. What is going on with this article?

AzureSphere開発でSDKのライブラリのリンクを追加する方法

AzureSphere開発でSDKのライブラリのリンクを追加する方法

初めてのAzureSphere開発で少しハマったので記録します。

立上げ

まず今回作りたかった製品をざっくり言うと、UARTで受信したデータをhttpでwebサーバにアップロードしていくという製品です。
開発環境はMSのドキュメントに従ってVisual Studio Codeの環境を立上げました。
チュートリアルのLチカサンプルで環境構築に成功したことを確認し、いざ実装。

楽勝?

UARTの実装を順調にこなし(GitHubからサンプルをクローンしただけ 笑)http処理部分に取り掛かります。
SDKのcurl使えばいいんでしょ。MSのドキュメントもあるし楽ショーじゃね。
とか調子に乗り始めたところでコケました。。。

なんでビルドが通らない

MSのドキュメントの手順を踏んでビルドしましたが下記のビルドエラー発生。

output
[build] C:\prj\SW\soft\AzureSphere\out\ARM-Debug/../../main.c:438: undefined reference to `curl_slist_append'  
[build] C:/Program Files (x86)/Microsoft Azure Sphere SDK/Sysroots/6/tools/gcc/real-ld.exe: C:\prj\SW\soft\AzureSphere\out\ARM-Debug/../../main.c:439: undefined reference to `curl_global_init'  
[build] C:/Program Files (x86)/Microsoft Azure Sphere SDK/Sysroots/6/tools/gcc/real-ld.exe: C:\prj\SW\soft\AzureSphere\out\ARM-Debug/../../main.c:440: undefined reference to `curl_easy_init'
・・・

curlの関数が定義されていない的なエラーだけどcurl/curl.hのインクルードはちゃんとしています。

しかも同じSDKで定義されている applibs/uart.h の関数は正常にビルドされている。なんで?

main.c
#include <applibs/storage.h>  // required only if you supply a certificate in the image package
#include <tlsutils/deviceauth_curl.h> // required only for mutual authentication
#include <curl/curl.h>
#include <curl/easy.h>

解決方法

・・・
小一時間MSのドキュメントとプロジェクトファイルの行き来を繰り返し、解決方法を発見しました。

↓これを。。。

CMakeLists.txt
target_link_libraries(${PROJECT_NAME} applibs pthread gcc_s c)

↓こう!

CMakeLists.txt
target_link_libraries(${PROJECT_NAME} applibs curl pthread gcc_s c)

結論としてはtarget_link_librariesでcurlのリンクを追加する必要があったみたいです。

CMakeを普段から使っている人からすると常識かもしれませんが、CMakeビギナーの自分には難問でした。。。

参照したサイト

Azure Sphere のドキュメント | Microsoft Docs(https://docs.microsoft.com/ja-jp/azure-sphere/)

ykwmt
hokuryodenko
三菱電機の代理店として、FA機器等の電気・電子機械器具の販売から、各種制御シス テム・電子機械器具の開発・設計・製造、そして建設業設備工事まで幅広く事業を展開しております。近年は農業事業や、様々な産業向けIoTシステムも手掛けており、新規事業の立上げ や産学連携を通して、“総合技術商社”としてユーザーのあらゆる要望に最適なシステムで対応できる総合力を構築しています。
https://www.hokuryodenko.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away