前言
配置paho mqtt的docker的交叉编译环境,用于代码提交bitbucket-pipeline自动化编译arm程序
环境准备
paho.mqtt.c 和 paho.mqtt.cpp代码下载不再赘述,参考(paho-mqtt开发环境搭建-CSDN博客)
openssl下载
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz // 版本根据需要自行选择
tar -xzvf openssl-1.1.1n.tar.gz
先准备一个文件夹,将这三份代码放到同一个目录
paho版本记录一下
// paho c++
3631bce7e0bd74cc11a46410669ccd2e23b6caed tag: v1.4.0
// paho c
6b1e202a701ffcdaa277b5644ed291287a70a7aa
openssl 编译脚本build.sh 放到代码根目录
#!/bin/bash
set -x
set -e
./Configure linux-aarch64 --prefix=/usr/local --cross-compile-prefix=aarch64-linux-gnu- no-unit-test
make -j8
make install
paho.mqtt.c 编译脚本build.sh 放到代码根目录
#!/bin/bash
set -x
set -e
cmake . -Bbuild -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SHARED=OFF -DPAHO_BUILD_STATIC=ON
cd build
make -j8
make install
cd -
rm -r build
paho.mqtt.cpp 编译脚本build.sh 放到代码根目录
#!/bin/bash
set -x
set -e
cmake . -Bbuild -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SHARED=OFF -DPAHO_BUILD_STATIC=ON
cd build
make -j8
make install
cd -
rm -r build
注意这里编的是静态库,根据需要自行修改
链接参考
target_link_libraries(mqtt_demo
PahoMqttCpp::paho-mqttpp3-static
)
选取base镜像
docker.io/ubuntu:20.04
先用镜像本地试一下测试编译
我存放代码的目录为 /home/demo/docker_bulid/ 映射到容器的/usr/docker_build中,自行修改,并cd到对应目录
docker run -ti -v /home/demo/docker_bulid/:/usr/docker_bulid docker.io/ubuntu:20.04
交叉编译
aarch64交叉编译工具链安装(交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装-CSDN博客)
配置交叉编译环境变量
export ARM_TOOLCHAIN_PREFIX="/usr/bin/aarch64-linux-gnu-"
export CC=${ARM_TOOLCHAIN_PREFIX}gcc
export CXX=${ARM_TOOLCHAIN_PREFIX}g++
export STRIP=${ARM_TOOLCHAIN_PREFIX}strip
export AR=${ARM_TOOLCHAIN_PREFIX}ar
export OBJCOPY=${ARM_TOOLCHAIN_PREFIX}objcopy
export RANLIB=${ARM_TOOLCHAIN_PREFIX}ranlib
export READELF=${ARM_TOOLCHAIN_PREFIX}readelf
依次运行openssl、paho.mqtt.c 和 paho.mqtt.cpp的编译脚本
环境配置后,可以编写测试程序,编译产物放到arm环境中测试一下,应该可以直接运行
docker build
openssl在刚刚在容器进行了交叉编译操作,因为是路径映射,做docker的时候,三个build.sh中可以只保留make install 操作
dockerfile base docker镜像自行换一下,注意这里也没有包含交叉编译链的安装
FROM docker.io/xxx
WORKDIR /usr/workspace
COPY openssl-1.1.1n /usr/workspace/openssl-1.1.1n
COPY paho.mqtt.c /usr/workspace/paho.mqtt.c
COPY paho.mqtt.cpp /usr/workspace/paho.mqtt.cpp
RUN cd /usr/workspace/openssl-1.1.1n/ && ./build.sh && cd - && rm -r /usr/workspace/openssl-1.1.1n
RUN cd /usr/workspace/paho.mqtt.c/ && ./build.sh && cd - && rm -r /usr/workspace/paho.mqtt.c
RUN cd /usr/workspace/paho.mqtt.cpp/ && ./build.sh && cd - && rm -r /usr/workspace/paho.mqtt.cpp
WORKDIR /
CMD ["/bin/bash"]
docker build
docker build -t <docker_name>:<docker_tag> . --no-cache
docker push
docker push <docker_name>:<docker_tag>