编译ARM版本mosquitto-1.6.8

2023-11-10

编译前提依赖

需下载
c-ares-1.14.0

#下载源码
wget -c https://c-ares.haxx.se/download/c-ares-1.14.0.tar.gz
#解压源码
tar -zxvf c-ares-1.14.0.tar.gz
#进入源码 
cd c-ares-1.14.0/
#配置安装路径,编译链
./configure --host=arm-linux --prefix=/disk_4/mqtt/mosquitto-1.6.8/arm/ares
#编译
make
#安装 
make install

e2fsprogs-1.45.5

#从github下载源码
git clone https://github.com/tytso/e2fsprogs.git
 
cd e2fsprogs/
 
./configure --host=arm-linux --prefix=/disk_4/mqtt/mosquitto-1.6.8/arm/e2fsprogs
 
make
 
make install
# 把lib下的uuid目录拷贝到安装目/disk_4/mqtt/mosquitto-1.6.8/arm/e2fsprogs下
cp -r lib/uuid /disk_4/mqtt/mosquitto-1.6.8/arm/e2fsprogs/

openssl-1.1.1d

wget -c ftp://ftp.pca.dfn.de/pub/tools/net/openssl/source/openssl-1.1.1d.tar.gz

编译参考文档:https://blog.csdn.net/weixin_42892101/article/details/103830497
以上都交叉编译成arm版本

编译mosquitto库

#下载mosquitto源码
wget -c https://mosquitto.org/files/source/mosquitto-1.6.8.tar.gz
#解压
tar -xvf mosquitto-1.6.8.tar.gz
#进入mosquitto目录
cd mosquitto-1.6.8
#使用此命令配置交叉编译
cmake -D CMAKE_C_COMPILER="arm-none-linux-gnueabi-gcc" -D CMAKE_CXX_COMPILER="arm-none-linux-gnueabi-g++" -D CMAKE_INSTALL_PREFIX=/disk_4/mqtt/mosquitto-1.6.8/arm/mosquitto/ .
#编译
make

会提示找不到相关库文件

编辑`CMakeCach.txt`文件指定相关路径即可
#再次make
make
#安装
make install

指定路径修改处

在这里插入图片描述

成果

在这里插入图片描述
在这里插入图片描述
最后将其复制到需要的arm平台开发板上

1.6.10版本编译

替换为自己的交叉编译工具链
ps:编译到最后可能会出现无法安装
Install the project…
– Install configuration: “”
CMake Error at cmake_install.cmake:41 (file):
file INSTALL cannot find
“/home/aron566/Downloads/hf_mosquitto/source/mosquitto/man/mosquitto_passwd.1”.
虚拟机中找一下文件复制到源码的man目录中,最后make install即可!不过不搞这步也可以生成库文件
在这里插入图片描述
在这里插入图片描述

#!/bin/sh
BUILD_HOST=/disk_4/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
ARM_GCC=${BUILD_HOST}gcc
ARM_CPP=${BUILD_HOST}g++
BASE=`pwd`
OUTPUT_PATH=${BASE}/install

OPENSSL=openssl-1.0.2t

make_dirs () {
    #为了方便管理,创建有关的目录
    cd ${BASE} && mkdir compressed install source -p
}

tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1
    fi

    echo "[OK] Downloaded [${filename}] "
}

tgit () { #try git and tar
    filename=`basename $1 | sed 's/.git//g'`

    echo "Clone [${filename}]..."
    if [ ! -f ${filename}.tgz ];then
        git clone $1
        rm ${filename}/.git* -rf
        echo "Making a tar file."
        tar -zcf ${filename}.tgz ${filename}
        rm ${filename} -rf
    fi

    echo "[OK] Cloned [${filename}] "
}

download_package () {
    cd ${BASE}/compressed
    #下载包
    tget  https://www.openssl.org/source/${OPENSSL}.tar.gz
    tgit  https://github.com/eclipse/paho.mqtt.c.git
    tgit  https://github.com/eclipse/mosquitto.git
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C ../source
    done
    rm -rf /tmp/list.txt
}

pre_make_ssl () {
    cd ${BASE}/source/${OPENSSL}
    startLine=`sed -n '/install_html_docs\:/=' Makefile`
    echo $startLine
    # 为了避免 多行结果
    for startline in $startLine
    do
        lineAfter=99
        endLine=`expr $startline + 999`
        sed -i $startline','$endLine'd' Makefile
        echo "install_html_docs:" >> Makefile
        echo "\t@echo skip by Schips" >> Makefile
        echo "install_docs:" >> Makefile
        echo "\t@echo skip by Schips" >> Makefile
        echo "# DO NOT DELETE THIS LINE -- make depend depends on it." >> Makefile
        break
    done
}

make_ssl () {
    # 编译安装 zlib
    cd ${BASE}/source/${OPENSSL}
    rm ${OUTPUT_PATH}/${OPENSSL} -rf
    echo "SSL ABOUT"
    CC=${ARM_GCC} ./config no-asm shared --prefix=${OUTPUT_PATH}/${OPENSSL}

    sed 's/-m64//g'  -i Makefile # 删除-m64 关键字 (arm-gcc 不支持)
    #sudo mv /usr/bin/pod2man /usr/bin/pod2man_bak
    #mv doc/apps /tmp/
    pre_make_ssl
    make && make install
}

make_paho_mqtt_c () {
    cd ${BASE}/source/paho.mqtt.c

    make CFLAGS+="-I ${OUTPUT_PATH}/${OPENSSL}/include" \
         LDFLAGS+="-L${OUTPUT_PATH}/${OPENSSL}/lib" \
         CC=${ARM_GCC} \
         prefix=${OUTPUT_PATH}/paho.mqtt.c

    # BUG: make install 不符合我们的意愿
    rm ${OUTPUT_PATH}/paho.mqtt.c -rf
    mkdir ${OUTPUT_PATH}/paho.mqtt.c/lib -p
    mkdir ${OUTPUT_PATH}/paho.mqtt.c/bin -p
    mkdir ${OUTPUT_PATH}/paho.mqtt.c/include -p

    cp ${BASE}/source/paho.mqtt.c/build/output/lib*    ${OUTPUT_PATH}/paho.mqtt.c/lib -d -v
    cp ${BASE}/source/paho.mqtt.c/build/output/samples ${OUTPUT_PATH}/paho.mqtt.c/bin -r -v
    cp ${BASE}/source/paho.mqtt.c/build/output/test    ${OUTPUT_PATH}/paho.mqtt.c/bin -r -v
    cp ${BASE}/source/paho.mqtt.c/src/*.h       ${OUTPUT_PATH}/paho.mqtt.c/include    -v

}

make_mosquitto () {
    cd ${BASE}/source/mosquitto
	 	cmake -D CMAKE_C_COMPILER="${ARM_GCC}" -D CMAKE_CXX_COMPILER="${ARM_CPP}" -D CMAKE_INSTALL_PREFIX=${OUTPUT_PATH}/mosquitto \
					-D OPENSSL_CRYPTO_LIBRARY=${OUTPUT_PATH}/${OPENSSL}/lib/libcrypto.so -D OPENSSL_INCLUDE_DIR=${OUTPUT_PATH}/${OPENSSL}/include \
					-D OPENSSL_SSL_LIBRARY=${OUTPUT_PATH}/${OPENSSL}/lib/libssl.so -D CMAKE_C_FLAGS=-lpthread .
	make WITH_TLS=yes WITH_DOCS=no
	make install
}

make_dirs
download_package
tar_package
make_ssl
make_paho_mqtt_c
make_mosquitto
exit $?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译ARM版本mosquitto-1.6.8 的相关文章

  • IT技能图谱

    成长的因素有很多 你知道知识图谱的作用吗 本文GET了当下最热门 最火爆的技术知识点 让你一库在手 技术全有 众所周知 我们的每个知识库都是邀请专家精心绘制图谱 并依据每个图谱的知识结构 筛选该技术分支知识点下的优质资源 经特邀编辑一一审核
  • LeetCode75:矩阵查找(二分查找)

    题目描述 请写出一个高效的在m n矩阵中判断目标值是否存在的算法 矩阵具有如下特征 每一行的数字都从左到右排序 每一行的第一个数字都比上一行最后一个数字大 例如 对于下面的矩阵 1 3 5 7 10 11 16 20 23 30 34 50

随机推荐

  • python踩过的坑之py文件命名导致导入包错误

    用python编程 一定要注意命名 今天为大家分享一个小错误 当执行import module时 解释器会根据下面的搜索路径 搜索module1 py文件 1 当前工作目录 2 PYTHONPATH中的目录 3 Python安装目录 usr
  • numpy中的cumsum()函数的使用

    关于numpy cumsum 在官网中官方给了一个很好的例子 cumsum的作用主要就是计算轴向的累加和 里面最重要的参数就是axis 当里面的参数axis没有值时 默认是一个一维数组进行加和 即 a np array 1 2 3 4 5
  • Java面试之Git与Maven面试题

    1 Git 是什么 它有什么作用 Git 是一种分布式版本控制系统 用于管理源代码的变更和追踪 它可以记录文件更改的历史 帮助多人协同开发 并提供了回滚 分支管理等功能 2 Git 和 SVN 或其他版本控制系统 有什么区别 SVN 是集中
  • kotlin Array和可变参数vararg之间互转

    可变参数可以直接赋值给array array转可变参数 在使用array时前面加上 传播符号 spread operator 举个例子 val array Array
  • VisualVM使用方法

    1 VisualVM 简介 VisualVM 是一个工具 它提供了一个可视界面 用于查看 Java 虚拟机 Java Virtual Machine JVM 上运行的基于 Java 技术的应用程序 Java 应用程序 的详细信息 Visua
  • 参数估计(点估计和区间估计)

    参数估计是以抽样分布为中介 用样本的参数特征对总体的参数进行数值估计的过程 一 点估计 1 点估计就是用样本统计量来估计总体参数 概念理解 当我们想知道某一总体的某个指标的情况时 测量整体该指标的数值 的工作量太大 或者不符合实际 这时我们
  • Go 编译 build 然后run遇到的问题

    首先 吐槽一下 https go zh org doc code html 这个官网如何编译 Go代码必须放在工作空间内 它其实就是一个目录 其中包含三个子目录 src 目录包含Go的源文件 它们被组织成包 每个目录都对应一个包 pkg 目
  • java deletecharat_Java StringBuffer.delete/deleteCharAt 删除字符

    首页 gt 基础教程 gt 常用类 gt 常用 StringBuffer StringBuilder 类 Java StringBuffer delete deleteCharAt 删除字符 java中StringBuffer delete
  • vue报错sockjs-node/info?t=或者报错info?t=

    前言 整理问题记录 问题现状 相关资料 sockjs node介绍 sockjs node 是一个JavaScript库 提供跨浏览器JavaScript的API 创建了一个低延迟 全双工的浏览器和web服务器之间通信通道 服务端 sock
  • JS数组合并(5种)

    前言 项目过程中 经常会遇到 JS 数组合并的情况 时常为这个纠结 这里整理一下 简单而实用的for 最容易想到的莫过于 for 了 会变更原数组 当然也可以写成生成新数组的形式 let arr 1 2 let arr2 3 4 for l
  • window电脑通过vscode的ssh访问linux服务器-详细部署教程

    在本文中将讲述linux服务器 window电脑的详细设置 一步一步部署 教程包括 在linux服务器和window客户端ssh设置 免密设置 xming图像访问 SSH 是为建立在应用层基础上的安全协议 SSH 是目前较可靠 专为远程登录
  • leetcode--python--228

    228 汇总区间 给定一个无重复元素的有序整数数组 nums 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 也就是说 nums 的每个元素都恰好被某个区间范围所覆盖 并且不存在属于某个范围但不属于 nums 的数字 x 列表中的
  • java属于编译型还是解释型语言?

    首先要明白编译型语言和解释型语言的定义 编译型语言 把做好的源程序全部编译成二进制代码的可运行程序 然后直接运行这个程序 特点 执行速度快 效率高 依靠编译器 跨平台性差 解释性语言 把做好的源程序翻译一句 然后执行一句 直至结束 特点 执
  • BSN长话短说之六:公链如何破局

    BSN长话短说之六 公链破局 王立新 感谢各位嘉宾抽出宝贵时间参与这次对话 先简单介绍下今天出席对话嘉宾 红枣科技CEO 何亦凡 Nervos联合创始人 吕国宁 分布科技Onchain CEO Neo创始人 达鸿飞 Algorand Fou
  • 真题详解(地址索引)-软件设计(五十一)

    真题详解 单元测试 软件设计 五十 https blog csdn net ke1ying article details 130189173 spm 1001 2014 3001 5501 指令寻址方式 有四种 直接寻址 寄存器寻址 隐含
  • Rest分发监听接口

    Rest分发监听接口 一 Rest分发接口 1 创建目录 2 New XMLSchema File Name 自己根据接口定义名字 Directory 选择自己接口Schema的路径 Target Namespace 这个路径根据要求 Sc
  • 使用xlrd库读取Excel自定义sheet表内容,以字典格式输出

    如题描述 如何根据自定义的worksheet读取工作表内容呢 对于参数化数据时如果能做到这个是有一定好处的 当然也有其他不同路径的处理方法也是可以的 想要过程完美需要时间打磨的呀 今天分享xlrd库的用法 根据自定义的sheet读取表格内容
  • 图文并茂开发AR小游戏全教程(一)

    AR动画可放大缩小平移旋转 可自行下载项目运行到真机上演示 由于项目以及下文用到的素材较大 GItHub 无法上传 故传到百度云LLGameAR 文章目录 一 AR 和 VR 概念 二 软件简介 Unity 3D Vuforia SDK 三
  • mybatis中resultmap与resulttype区别

    resultmap与resulttype的区别为 对象不同 描述不同 类型适用不同 一 对象不同 1 resultmap resultMap如果查询出来的列名和pojo的属性名不一致 通过定义一个resultMap对列名和pojo属性名之间
  • 编译ARM版本mosquitto-1.6.8

    编译前提依赖 需下载 c ares 1 14 0 下载源码 wget c https c ares haxx se download c ares 1 14 0 tar gz 解压源码 tar zxvf c ares 1 14 0 tar