【问题标题】:Cross-compiling Azure IoT SDK for C交叉编译 Azure IoT SDK for C
【发布时间】:2020-09-27 15:51:10
【问题描述】:

我已经成功地为运行嵌入式 Linux 的目标设备交叉编译了 C Azure IoT SDK。说明在这里:https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/SDK_cross_compile_example.md

下一步是使用在目标设备上运行的 SDK 获取基本应用程序。

如何去做这件事?生成的库等在哪里复制到目标设备的 sysroot。

似乎只支持 Rasberry Pi 并生成新的固件映像。

【问题讨论】:

    标签: c cross-compiling embedded-linux azure-iot-hub azure-iot-sdk


    【解决方案1】:

    我建议您在生成 makefile 时使用 -DCMAKE_INSTALL_PREFIX=[输出路径]。运行 cmake 和 make 后,您可以运行 make install ,它将生成的库复制到您选择的位置。您不想将它们安装到主机的库搜索路径中,因为(可能)它们是为不兼容的体系结构构建的。完成此操作后,/lib 目录将包含构建应用程序所需的库。这些是静态库(除非您另有选择),因此只需将它们链接到您的应用程序。他们不需要在设备上。显然,您还需要交叉编译您的应用程序。

    不过,您需要注意几件事。您的设备需要具有与您在构建 SDK 时使用的相同版本的 OpenSSL 和 curl。这些是动态库,因此如果您不注意这一点,您的应用程序可能会在运行时失败,因为版本不匹配。

    这里还有另一个交叉编译的例子:https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/Docker_SDK_Cross_Compile.md。此版本还构建了必备库,并就如何交叉编译应用程序提供了建议。它使用 Docker 容器来执行此操作,但即使您不想使用 Docker,它仍然可以帮助您完成流程。

    【讨论】:

    • 目前,我只是根据 azure-iot-sdk-c/iothub_client/samples 中提供的示例代码开发我的目标应用程序。我只是修改任何示例代码并运行 make。然后,生成的输出二进制文件位于 azure-iot-sdk-c/cmake/iotsdk_linux/samples 内的相应文件夹中。似乎 Azure 库是静态构建到应用程序中的,只有一些对共享库的依赖,例如目标上的 openssl 和 curl。这在目标上运行良好。
    • 我还有另一个问题。我还希望在目标上启用带有证书的设备配置。似乎当我按照指示进行交叉编译时,它不会在 azure-iot-sdk-c/provisioning_client/samples 中构建配置示例代码。我在 cmake 命令中明确添加了选项 Duse_prov_client:BOOL=ON,但没有任何乐趣。
    • 应该可以。您应该开始一个新线程并包括您的 cmake 和构建日志。
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 2011-05-20
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多