此教程为pahoMQTT.c的交叉编译, 通过了aarch64和arm32(uclibc)平台验证, 适用于rv1106/rv1103/rk3228H等芯片. (2023.9月著)
- 编译平台ubuntu20.04需要安装交叉编译器. cmake等软件.
- pahoMQTT 需要依赖 openssl, 需要先交叉编译openssl.
安装编译环境(Ubuntu20.04)
编译环境安装
交叉编译器
sudo apt install gcc-aarch64-linux-gnu
如果是SDK自带工具链则设置环境变量即可.
export RV1103_CROSS_PATH=/rv1103/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/arm-rockchip830-linux-uclibcgnueabihf/bin
export PATH=$PATH:$ RV1103_CROSS_PATH
官方要求软件安装
sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui
sudo apt-get install fakeroot devscripts dh-make lsb-release
sudo apt-get install libssl-dev
sudo apt-get install doxygen graphviz
下载软件源码
openssl https://github.com/openssl/openssl
pahoMQTT.c https://github.com/eclipse/paho.mqtt.c
无法访问github的, 使用百度云下载
链接:https://pan.baidu.com/s/1BcqXHh82Q_b5c_KZBuVyMg?pwd=7r8t
提取码:7r8t
交叉编译
为了方便编译, 新建编译文件夹, 放入下载的源码包, 然后解压.
mkdir pahoMqttProject
cd pahoMqtttProject
解压源码包
tar -xvf openssl-1.1.1v.tar.gz
unzip paho.mqtt.c-master.zip
解压后
openssl交叉编译
进入openssl项目文件夹, 配置config
./config no-asm shared no-async --prefix=$(pwd)/install --cross-compile-prefix=aarch64-linux-gnu-
cross-compile-prefix=配置交叉编译器
编译和安装
make
make install
遇到 error: unrecognized command-line option '-m64' 报错, 删除Makefile中-m64选项即可.原因可能是我们编译器不支持x86_64的环境(此处猜测,有知道的可告知).
编译完成可以在install路径下查看
pahoMQTT.c交叉编译
进入pahoMQTT.c项目文件夹, 配置cmake
mkdir mqttBuild
cd mqttBuild
cmake -DPAHO_WITH_SSL=TRUE -DOPENSSL_ROOT_DIR=pahoMqttProject/openssl-1.1.1v/install -DOPENSSL_LIBRARIES=pahoMqttProject/openssl-1.1.1v/install/lib -DCMAKE_INSTALL_PREFIX=pahoMqttProject/paho.mqtt.c-master/mqttInstall -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc ..
这些选项需要根据自己的路径做调整
DOPENSSL_ROOT_DIR=指定openssl的安装路径, 是之前编译的openssl-1.1.1v/install目录
DOPENSSL_LIBRARIES=指定openssl的动态库路径, 是openssl-1.1.1v/install/lib目录(这个应该不是必须要, 不太确定所以加上了)
DCMAKE_C_COMPILER=指定交叉编译器
编译和安装
make
make install
编译完成可以在mtqqInstall路径下查看
验证结果
file命令查看动态链接库的属性
MQTTVersion检查动态库
拷贝openssl和MQTT的lib文件到目标开发板/usr/lib下, mqtt的bin文件MQTTVersion到/usr/bin下