热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MQTT(一)移植mosquitto到开发板

一、安装opensslmosquitto的安装依赖openssl里的库libssl.so.1.1和libcrypto.so.1.1。1.下载openssl官方下载网站ÿ

一、安装openssl

mosquitto的安装依赖openssl里的库libssl.so.1.1和libcrypto.so.1.1。

1. 下载openssl
官方下载网站:https://www.openssl.org/source/,目前官方测试版本已经到3.0,稳定版本是1.1,这里下载的是1.1版本。
在这里插入图片描述
2. 解压

解压下载的安装包,进入解压后的文件夹,创建安装目录__install:

tar -zxvf openssl-1.1.1j.tar.gz
cd openssl-1.1.1j/
mkdir __install

3. 编译配置

./config no-asm shared --prefix=$(pwd)/__install

参数说明:
no-asm:是在交叉编译过程中不使用汇编代码代码加速编译过程,因为它的汇编代码是对arm格式不支持的

shared :生成动态连接库

–prefix :指定make install后生成目录的路径,$(pwd)为当前文件夹

4. 修改Makefile文件

一共两处:第一,修改交叉编译工具

##### User defined commands and flags ################################# We let the C compiler driver to take care of .s files. This is done in
# order to be excused from maintaining a separate set of architecture
# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
# gcc, then the driver will automatically translate it to -xarch=v8plus
# and pass it down to assembler. In any case, we do not define AS or
# ASFLAGS for this reason.CROSS_COMPILE=mipsel-openwrt-linux-
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++
CPPFLAGS=
CFLAGS=-Wall -O3
CXXFLAGS=-Wall -O3
LDFLAGS=
EX_LIBS=

把CROSS_COMPILE=设为自己的编译工具,我这里设置的是mipsel-openwrt-linux-,可能需要考虑是否已经将交叉编译的工具链设置到全局路径中,否则这里是不是要改为绝对路径。

第二,去掉工程选项中-m64标志,-m64是针对64位系统的,我们的板子是32位,所以这里去掉。


##### Project flags ################################################### Variables starting with CNF_ are common variables for all product typesCNF_CPPFLAGS=-DNDEBUG
#CNF_CFLAGS=-pthread -m64
CNF_CFLAGS=-pthread
#CNF_CXXFLAGS=-std=c++11 -pthread -m64
CNF_CXXFLAGS=-std=c++11 -pthread
CNF_LDFLAGS=
CNF_EX_LIBS=-ldl -pthread

5. 编译安装

make
make install

成功后,编译出来的文件在_install的文件夹,其中include为头文件,lib为程序运行中用到的库

bin include lib share ssl

到这里,openssl安装完毕,接下来安装mosquitto。


二、安装mosquitto

1. 官网下载源码

https://mosquitto.org/download/

在这里插入图片描述
这里直接下载源码包,在linux下解压,进入目录

tar -zxvf mosquitto-2.0.8
cd mosquitto-2.0.8/

2. 修改config.mk文件

# Build with SRV lookup support.
WITH_SRV:=no# Build with websockets support on the broker.
WITH_WEBSOCKETS:=no# Build mosquitto_sub with cJSON support
WITH_CJSON:=no
.
.
.
STATIC_LIB_DEPS:=#add
CFLAGS +=-I/{上文openssl安装的路径}/openssl-1.1.1j/__install/include
LDFLAGS += -L/{上文openssl安装的路径}/openssl-1.1.1j/__install/lib -lssl -lcryptoAPP_CPPFLAGS=$(CPPFLAGS) -I. -I../../ -I../../include -I../../src -I../../lib
APP_CFLAGS=$(CFLAGS) -DVERSION=\""${VERSION}\""
APP_LDFLAGS:=$(LDFLAGS)
.
.
.
INSTALL?=install
#prefix?=/usr/local
prefix?=/home/cross_mqtt/mqtt_install
incdir?=${prefix}/include
libdir?=${prefix}/lib${LIB_SUFFIX}
localedir?=${prefix}/share/locale
mandir?=${prefix}/share/man
#STRIP?=strip
STRIP?=mipsel-openwrt-linux-strip

参考网上的做法,把WITH_SRV和WITH_WEBSOCKETS设为no,编译的时候报缺少cJSON文件,这里我也是直接去掉了。后面添加了之前安装的openssl的安装路径,CFLAGS和LDFLAGS对应头文件和库文件。最后是修改默认安装路径,因为这里是交叉编译的库,最好是重新建立目录保存,还有STRIP也需要修改成交叉编译工具的STRIP,最好使用绝对路径。

3. 编译安装

make CC=mipsel-openwrt-linux-gcc CXX=mipsel-openwrt-linux-g++
make install

CC和CXX换成自己的交叉编译工具,最好使用绝对路径。

安装完成后,在mqtt_install目录下可以看到以下文件

bin include lib sbin share

使用时,把include和lib两个目录放在工程目录下,与源码一起编译,然后把lib下的库文件放到开发板即可运行。下一篇通过测试代码,简单了解mqtt的使用。

参考:移植安装mosquitto到ubuntu和ARM开发板


推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 本书详细介绍了在最新Linux 4.0内核环境下进行Java与Linux设备驱动开发的全面指南。内容涵盖设备驱动的基本概念、开发环境的搭建、操作系统对设备驱动的影响以及具体开发步骤和技巧。通过丰富的实例和深入的技术解析,帮助读者掌握设备驱动开发的核心技术和最佳实践。 ... [详细]
  • 普通树(每个节点可以有任意数量的子节点)级序遍历 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 在Linux环境下编译安装Heartbeat时,常遇到依赖库缺失的问题。为确保顺利安装,建议预先通过yum安装必要的开发库,如glib2-devel、libtool-ltdl-devel、net-snmp-devel、bzip2-devel和ncurses-devel等。这些库是编译过程中不可或缺的组件,能够有效避免编译错误,确保Heartbeat的稳定运行。 ... [详细]
author-avatar
停留的烟蒂_984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有