Как кросс-компилировать библиотеку Paho-MQTT-C для ARM?

Как выполнить кросс-компиляцию библиотеки Paho-MQTT C для платформы ARM.

Вот шаги, которые я выполнил.

1) Downloaded library from  [Paho-MQTT-C][1]
2) after download, I opened the directory and entered some commands.
3) command for setting the GCC-ARM tool chain (environment variable_path)
4) make CC=(ARM-CROSS_COMPILE)gcc

Далее я наблюдаю следующую ошибку

mkdir -p build/output/samples
mkdir -p build/output/test
echo OSTYPE is Linux
OSTYPE is Linux
sed -e "s/@CLIENT_VERSION@/1.2.0/g" -e "s/@BUILD_TIMESTAMP@/Mon Apr 16 17:13:10 IST 2018/g" src/VersionInfo.h.in > build/VersionInfo.h
arm-cortexa9-linux-gnueabihf-gcc -g -fPIC  -Os -Wall -fvisibility=hidden -Ibuild -o build/output/libpaho-mqtt3c.so.1.0 src/MQTTPersistence.c src/Heap.c src/Socket.c src/MQTTProtocolClient.c src/MQTTProtocolOut.c src/StackTrace.c src/MQTTPersistenceDefault.c src/MQTTClient.c src/Messages.c src/MQTTPacketOut.c src/Clients.c src/OsWrapper.c src/Thread.c src/MQTTPacket.c src/Log.c src/LinkedList.c src/utf-8.c src/SocketBuffer.c src/Tree.c  -shared -Wl,-init,MQTTClient_init -lpthread -Wl,-soname,libpaho-mqtt3c.so.1
ln -s libpaho-mqtt3c.so.1.0  build/output/libpaho-mqtt3c.so.1
ln -s libpaho-mqtt3c.so.1 build/output/libpaho-mqtt3c.so
arm-cortexa9-linux-gnueabihf-gcc -g -fPIC  -Os -Wall -fvisibility=hidden -Ibuild -o build/output/libpaho-mqtt3cs.so.1.0 src/MQTTPersistence.c src/Heap.c src/Socket.c src/SSLSocket.c src/MQTTProtocolClient.c src/MQTTProtocolOut.c src/StackTrace.c src/MQTTPersistenceDefault.c src/MQTTClient.c src/Messages.c src/MQTTPacketOut.c src/Clients.c src/OsWrapper.c src/Thread.c src/MQTTPacket.c src/Log.c src/LinkedList.c src/utf-8.c src/SocketBuffer.c src/Tree.c -DOPENSSL  -shared -Wl,--start-group -lpthread -ldl -lssl -lcrypto -Wl,--end-group -Wl,-init,MQTTClient_init -Wl,-soname,libpaho-mqtt3cs.so.1 -Wl,-no-whole-archive
In file included from src/MQTTPersistence.h:23:0,
             from src/MQTTPersistence.c:28:
src/Clients.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/Socket.c:32:0:
src/SocketBuffer.h:28:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/SSLSocket.c:31:0:
src/SocketBuffer.h:28:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPacket.h:25:0,
             from src/MQTTProtocolClient.h:25,
             from src/MQTTProtocolClient.c:34:
src/SSLSocket.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPacket.h:25:0,
             from src/MQTTProtocolOut.h:24,
             from src/MQTTProtocolOut.c:35:
src/SSLSocket.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/StackTrace.c:21:0:
src/Clients.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPersistence.h:23:0,
             from src/MQTTClient.c:53:
src/Clients.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPacket.h:25:0,
             from src/MQTTPacketOut.h:22,
             from src/MQTTPacketOut.c:29:
src/SSLSocket.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/Clients.c:24:0:
src/Clients.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPacket.h:25:0,
             from src/MQTTPacket.c:26:
src/SSLSocket.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/MQTTPacket.h:25:0,
             from src/Log.c:27:
src/SSLSocket.h:29:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
In file included from src/SocketBuffer.c:25:0:
src/SocketBuffer.h:28:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
Makefile:219: recipe for target 'build/output/libpaho-mqtt3cs.so.1.0' failed
make: *** [build/output/libpaho-mqtt3cs.so.1.0] Error 1

4) Я установил openssl с помощью этой команды

$ sudo apt-get установить libssl-dev*

Openssl успешно установлен, но по-прежнему возникает та же ошибка, что и выше.

Что мне нужно сделать для компиляции библиотеки Paho-MQTT-C для ARM?


person Yuvraj Takey    schedule 18.04.2018    source источник
comment
хм, почему вы вообще хотите кросскомпилировать его вручную? Рецепт OpenEmbedded готов для использования по адресу cgit.openembedded.org/meta-openembedded/tree/meta-oe/ (как следует из ваших тегов что вы хотите запустить yocto, например, poky-дистрибутив на основе оригинального оборудования)   -  person LetoThe2nd    schedule 19.04.2018
comment
на самом деле Yocto уже установлен на моей плате, здесь я пытаюсь кросс-компилировать свой (на основе C) проект для ARM. Я использую библиотеку Paho-C для подключения MQTT, которая внутренне использует файл openssl/ssl.h для своей работы. @LetoThe2nd   -  person Yuvraj Takey    schedule 19.04.2018


Ответы (2)


Правильное решение с учетом вашего вопроса и объяснения, как в комментариях, выглядит следующим образом:

  1. Пересоберите образ на своей плате и включите в него пакет paho-mqtt-c. Это можно сделать с помощью переменной IMAGE_INSTALL в рецепте образа или CORE_IMAGE_EXTRA_INSTALL, если вы хотите внедрить его через local.conf или что-то подобное.

  2. Для кросс-компиляции создайте подходящий SDK: bitbake -c populate_sdk YOUR_IMAGE

  3. Используйте этот встроенный SDK для компиляции вашего программного обеспечения. Это подробно описано здесь, в главах 8 и 9: https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#sdk-using-the-standard-sdk

При желании вы также можете сделать:

  1. Создайте рецепт для своего приложения и создайте его непосредственно через bitbake. Если рецепт ЗАВИСИТ += "paho-mqtt-c", тогда обо всем должно позаботиться автоматически.

  2. В целях разработки вы можете строить из дерева исходных текстов для разработки, как описано здесь: https://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#building-software-from-an-external-source

person LetoThe2nd    schedule 19.04.2018

Если вы уже используете сборку на основе Yocto, вы можете рассмотреть возможность интеграции слоя meta-intel-iot-middleware

Уровень мета-intel-iot-middleware предоставляет полезный рецепт для paho-mqtt 3.1. Вы можете включить это, используя IMAGE_INSTALL.

person sob    schedule 22.04.2018