Кросс-компиляция Azure IoT SDK для C

Мне удалось выполнить кросс-компиляцию C Azure IoT SDK для целевого устройства со встроенным Linux. Инструкции находятся здесь: https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/SDK_cross_compile_example.md

Следующий шаг — получить базовое приложение с помощью SDK, работающего на целевом устройстве.

Как бы это сделать? Где находятся сгенерированные библиотеки и т. д. для копирования в системный корень целевого устройства.

Вроде есть только поддержка Rasberry Pi и генерация нового образа прошивки.


person Engineer999    schedule 08.06.2020    source источник


Ответы (1)


Я бы порекомендовал вам использовать -DCMAKE_INSTALL_PREFIX=[выходной путь] при создании make-файлов. После запуска cmake и make вы можете запустить make install, который скопирует сгенерированные библиотеки в выбранное вами место. Вы НЕ хотите устанавливать их в путь поиска библиотеки вашего хоста, поскольку (предположительно) они созданы для несовместимой архитектуры. После этого в каталоге /lib будут библиотеки, которые вам нужно использовать для сборки вашего приложения. Это статические библиотеки (если вы не выбрали иное), поэтому их нужно только связать с вашим приложением. Они не должны быть на устройстве. Очевидно, вам также потребуется кросс-компилировать ваше приложение.

Однако есть несколько вещей, на которые вам нужно обратить внимание. На вашем устройстве должна быть установлена ​​та же версия OpenSSL и curl, которые вы использовали при сборке SDK. Это динамические библиотеки, поэтому ваше приложение, скорее всего, выйдет из строя во время выполнения, если вы не позаботитесь об этом, поскольку будет несоответствие версий.

Здесь есть еще один пример кросс-компиляции: https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/Docker_SDK_Cross_Compile.md. В этой версии также собраны необходимые библиотеки и есть предложения по перекрестной компиляции приложения. Для этого он использует контейнер Docker, но даже если вы не хотите использовать Docker, он все равно может помочь вам в вашем процессе.

person Mark Radbourne    schedule 16.06.2020
comment
На данный момент я просто разрабатываю свое целевое приложение на основе примера кода, предоставленного в azure-iot-sdk-c/iothub_client/samples. Я просто изменяю любой пример кода и запускаю make. Полученный двоичный файл вывода затем находится в соответствующей папке внутри azure-iot-sdk-c/cmake/iotsdk_linux/samples. Кажется, что библиотеки Azure статически встроены в приложение с некоторыми зависимостями от общих библиотек, таких как openssl и curl, на цели. Это отлично работает на цели. - person Engineer999; 17.06.2020
comment
Однако у меня есть другая проблема. Я также хочу включить подготовку устройства с помощью сертификатов на цели. Кажется, когда я выполняю кросс-компиляцию в соответствии с инструкциями, он не создает пример кода подготовки в azure-iot-sdk-c/provisioning_client/samples. Я явно добавил параметр Duse_prov_client:BOOL=ON в команду cmake, но без радости. - person Engineer999; 17.06.2020
comment
Это должно сработать. Вы должны начать новый поток и включить журналы cmake и build. - person Mark Radbourne; 18.06.2020