Ошибка компоновки: не удается найти скомпилированную динамическую библиотеку -lrdkafka в PlatformIO

Я пытаюсь заставить Кафку работать на Esp32 с помощью PlatformIO.

Я попытался связать библиотеку C с проектом, встроенным в PlatformIO, используя флаги сборки, выраженные в моем файле platformio.ini. Я использую библиотеку librdkafka. Расположение файла librdkafka.so находится в / usr / local / lib, но всякий раз, когда я строю свой проект со связанной библиотекой в ​​plaformio, я получаю следующую ошибку:

platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/5.2.0
/../../../../xtensa-esp32-elf/bin/ld: cannot find -lrdkafka

файл platformio.ini:

[env:featheresp32]
platform = espressif32
board = featheresp32
framework = espidf
build_flags =
   -L/usr/local/lib
   -I/usr/local/include/librdkafka
   -lrdkafka

Вне PlatformIO я успешно связал librdkafka с файлом проекта main.c, используя следующую команду:gcc main.c -L/usr/local/lib -l:librdkafka.so -lz -lpthread -lrt -I/usr/local/include/librdkafka

2 ответа

Вы пытаетесь связать библиотеку Kafka, созданную для вашей системы, с вашей программой ESP32.

Нет абсолютно никакого способа, которым это может работать. Это две разные архитектуры. Ваша система, на которой вы используете platformio, скорее всего, является процессором Intel, поэтому все, что в / usr / local / lib, создано для этого, а не для ESP32.

Вы, вероятно, работаете в Linux, поэтому библиотека Kafka создана для Linux. ESP32 не работает под управлением Linux. Так что нет никакой возможности, чтобы библиотека Kafka могла работать на ESP32, даже если она была скомпилирована для него, а это не так.

Kafka не предназначен для работы на ESP32. Если вы хотите, чтобы ваш ESP32 взаимодействовал с системой Kafka, вам нужно найти клиент, совместимый с Kafka, который предназначен для работы на ESP32. librdkafka никак не совместим с ESP32.

Если речь идет о размещении сервера Kafka на ESP32… ни в коем случае!

Но если вы ищете способ отправить данные из ESP32 в Kafka, я предполагаю, что вы уже проверили, нет ли в кластере Kafka, в который вы хотите отправить данные, доступного прокси-сервера REST. Если вы действительно зависите от librdkafka, то есть проблема, упомянутая в предыдущем посте. Однако если вы используете Confluent Cloud Kafka в качестве удаленного сервера, на который хотите отправлять данные, вы можете попробовать REST API, доступный для HTTP Post. Проверьте это --> https://docs.confluent.io/cloud/current/kafka-rest/kafka-rest-cc.html#produce-api.

Даже если целевой Kafka не находится в облаке и вы можете им управлять, доступны альтернативные решения: через Confluent REST PROXY вы можете настроить. https://docs.confluent.io/platform/current/kafka-rest/ быстрый старт.html

Другие вопросы по тегам