当前位置: 首页 > article >正文

树莓派上从源码编译Mosquitto保姆级教程(含cjson依赖缺失等常见错误解决)

树莓派上从源码编译Mosquitto保姆级教程含cjson依赖缺失等常见错误解决在物联网开发中MQTT协议因其轻量级和高效性成为设备通信的首选方案。而Mosquitto作为最流行的开源MQTT代理之一在树莓派这样的嵌入式设备上表现出色。本文将带你从零开始在树莓派上编译安装Mosquitto解决编译过程中可能遇到的各种问题特别是cjson依赖缺失等常见错误。1. 准备工作与环境配置在开始编译之前我们需要确保树莓派系统已经准备好所有必要的工具和环境。首先更新系统软件包sudo apt update sudo apt upgrade -y安装编译所需的依赖项sudo apt install -y build-essential cmake git libssl-dev libc-ares-dev libwebsockets-dev这些依赖包括build-essential包含GCC编译器等基础工具cmake构建工具git版本控制工具libssl-devOpenSSL开发库libc-ares-dev异步DNS解析库libwebsockets-devWebSocket支持库提示建议使用树莓派官方Raspberry Pi OS系统其他发行版可能需要调整包管理命令。2. 解决cjson依赖问题编译Mosquitto时最常见的错误就是缺少cjson库。我们先主动安装这个依赖而不是等到编译报错。2.1 从源码编译安装cjsongit clone https://github.com/DaveGamble/cJSON.git cd cJSON mkdir build cd build cmake .. make sudo make install安装完成后需要确保系统能够找到这个库sudo ldconfig2.2 验证cjson安装可以通过以下命令验证cjson是否安装成功pkg-config --modversion cjson如果返回版本号说明安装成功。如果没有输出可能需要手动设置PKG_CONFIG_PATHexport PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH3. 下载并编译Mosquitto源码3.1 获取Mosquitto源码从官方仓库获取最新稳定版源码wget https://mosquitto.org/files/source/mosquitto-2.0.15.tar.gz tar -zxvf mosquitto-2.0.15.tar.gz cd mosquitto-2.0.153.2 配置编译选项Mosquitto支持多种编译选项我们可以根据需求自定义make WITH_CJSONyes WITH_WEBSOCKETSyes WITH_TLSyes常用编译选项说明选项描述默认值WITH_CJSON启用cJSON支持noWITH_WEBSOCKETS启用WebSocket支持noWITH_TLS启用TLS加密yesWITH_SRV启用DNS SRV记录支持no3.3 解决编译中的常见问题如果在编译过程中遇到问题可以尝试以下解决方案找不到头文件sudo apt install -y libcjson-dev链接错误export LDFLAGS-L/usr/local/lib export CPPFLAGS-I/usr/local/include内存不足 树莓派内存有限可以增加交换空间sudo dphys-swapfile swapoff sudo nano /etc/dphys-swapfile # 修改CONF_SWAPSIZE1024 sudo dphys-swapfile setup sudo dphys-swapfile swapon4. 安装与配置Mosquitto4.1 安装编译好的二进制文件sudo make install4.2 解决动态库加载问题安装后运行Mosquitto可能会遇到动态库找不到的问题sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1 sudo ldconfig4.3 创建系统服务为了让Mosquitto随系统启动可以创建systemd服务sudo nano /etc/systemd/system/mosquitto.service添加以下内容[Unit] DescriptionMosquitto MQTT Broker Afternetwork.target [Service] ExecStart/usr/local/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf Restarton-failure Usermosquitto [Install] WantedBymulti-user.target然后启用并启动服务sudo systemctl enable mosquitto sudo systemctl start mosquitto5. 测试与验证5.1 基本功能测试在一个终端启动订阅客户端mosquitto_sub -t test -v在另一个终端发布消息mosquitto_pub -t test -m Hello from Raspberry Pi5.2 高级功能测试测试TLS加密通信# 生成测试证书 openssl req -new -x509 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt openssl genrsa -out server.key 2048 openssl req -new -out server.csr -key server.key openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 # 配置Mosquitto使用TLS sudo nano /etc/mosquitto/mosquitto.conf添加以下配置listener 8883 cafile /path/to/ca.crt certfile /path/to/server.crt keyfile /path/to/server.key5.3 性能监控Mosquitto提供了内置的$SYS主题可以监控代理状态mosquitto_sub -t \$SYS/# -v6. 常见问题与解决方案6.1 端口已被占用如果1883端口被占用可以修改监听端口sudo nano /etc/mosquitto/mosquitto.conf添加listener 18846.2 权限问题Mosquitto默认以mosquitto用户运行确保相关文件有正确权限sudo chown -R mosquitto:mosquitto /var/lib/mosquitto/6.3 内存泄漏排查如果怀疑有内存泄漏可以启用详细日志mosquitto -v或者使用valgrind工具检测valgrind --leak-checkfull mosquitto7. 优化与高级配置7.1 性能调优对于树莓派这样的资源受限设备可以调整以下参数sudo nano /etc/mosquitto/mosquitto.conf推荐配置persistence true persistence_location /var/lib/mosquitto/ autosave_interval 1800 max_connections 100 message_size_limit 07.2 安全配置启用认证和访问控制# 创建密码文件 mosquitto_passwd -c /etc/mosquitto/passwd username # 配置Mosquitto sudo nano /etc/mosquitto/mosquitto.conf添加allow_anonymous false password_file /etc/mosquitto/passwd7.3 插件系统Mosquitto支持通过插件扩展功能例如# 安装认证插件 sudo apt install -y mosquitto-auth-plug # 配置插件 sudo nano /etc/mosquitto/conf.d/auth.conf添加auth_plugin /usr/lib/mosquitto/auth-plug.so auth_opt_backends mysql auth_opt_host localhost auth_opt_port 33068. 实际应用案例8.1 家庭自动化系统将树莓派作为智能家居中枢使用Mosquitto连接各种IoT设备# 示例Python发布者 import paho.mqtt.publish as publish publish.single(home/livingroom/light, on, hostnamelocalhost, port1883, auth{username:user, password:pass})8.2 远程监控系统通过Mosquitto实现传感器数据的远程采集# 传感器数据发布 mosquitto_pub -t sensors/temperature -m 23.5 -u user -P pass8.3 跨网络通信配置Mosquitto桥接连接不同网络的MQTT代理sudo nano /etc/mosquitto/conf.d/bridge.conf添加connection bridge-remote address remote.broker.example.com:1883 topic # both 2 remote_username user remote_password pass在树莓派上从源码编译Mosquitto虽然步骤较多但能够获得更高的灵活性和更好的性能优化空间。特别是在需要特定功能或遇到依赖问题时掌握源码编译的方法尤为重要。实际使用中建议定期检查Mosquitto的日志文件及时发现并解决问题。

相关文章:

树莓派上从源码编译Mosquitto保姆级教程(含cjson依赖缺失等常见错误解决)

树莓派上从源码编译Mosquitto保姆级教程(含cjson依赖缺失等常见错误解决) 在物联网开发中,MQTT协议因其轻量级和高效性成为设备通信的首选方案。而Mosquitto作为最流行的开源MQTT代理之一,在树莓派这样的嵌入式设备上表现出色。本…...

HsMod:炉石传说玩家的终极效率工具,如何让游戏体验提升300%?

HsMod:炉石传说玩家的终极效率工具,如何让游戏体验提升300%? 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架的炉石传说模改…...

别再傻傻分不清!手把手教你用ICCID号快速识别三大运营商的物联网卡

物联网卡ICCID解码实战:3分钟精准识别运营商归属 当你面对成百上千张物联网卡需要快速分类时,ICCID就像每张卡的DNA——只需要掌握几个关键数字,就能在几秒钟内判断出它属于移动、联通还是电信。这不仅是运维效率的问题,更直接关…...

Java-RPG-Maker-MV-Decrypter:三步快速解密RPG游戏资源的终极工具

Java-RPG-Maker-MV-Decrypter:三步快速解密RPG游戏资源的终极工具 【免费下载链接】Java-RPG-Maker-MV-Decrypter You can decrypt whole RPG-Maker MV Directories with this Program, it also has a GUI. 项目地址: https://gitcode.com/gh_mirrors/ja/Java-RPG…...

从‘算得准’到‘算得稳’:给算法工程师的微分方程数值求解避坑指南

从‘算得准’到‘算得稳’:给算法工程师的微分方程数值求解避坑指南 在工业仿真、自动驾驶控制或金融衍生品定价中,算法工程师常常需要将连续的物理世界转化为离散的数值模型。一个弹簧阻尼系统的振动分析,可能因为显式欧拉法的步长选择不当&…...

RocketMQ入门第一篇:核心概念与整体工作原理零基础详解

文章目录一、前言:为什么学RocketMQ?它到底是什么?二、RocketMQ核心基础概念:看懂术语才算入门1. 消息(Message):传输的最小数据单元2. 主题(Topic):消息的一…...

如何高效使用VLC媒体播放器:5个必备技巧与完整指南

如何高效使用VLC媒体播放器:5个必备技巧与完整指南 【免费下载链接】vlc VLC media player - All pull requests are ignored, please use MRs on https://code.videolan.org/videolan/vlc 项目地址: https://gitcode.com/gh_mirrors/vl/vlc VLC媒体播放器作…...

VSCode 2026跨端调试增强来了:手把手配置iOS/Android/Web/Electron四端统一断点,附可复用launch.json模板(2024 Q3已灰度验证)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026跨端调试增强的演进与核心突破 VSCode 2026 版本重构了调试代理通信协议栈,首次实现 WebContainer、WSL2、iOS Simulator 和 Android Emulator 四端统一调试会话管理。其核心突破…...

等保测评官现场发问的5个致命问题,Docker 27金融容器团队如何用1份证据包一次性闭环应答?

更多请点击: https://intelliparadigm.com 第一章:Docker 27金融容器等保适配方法论总览 在金融行业强监管背景下,Docker 27 版本(含 containerd v2.0、runc v1.2)需满足《网络安全等级保护基本要求》(GB…...

集群吞吐下降47%?Docker 27默认调度器已悄然启用Weighted Least Loaded算法——你还没更新权重配置吗?

更多请点击: https://intelliparadigm.com 第一章:Docker 27集群调度算法升级教程 Docker 27 引入了全新的可插拔调度器框架(Scheduler Plugin Framework),支持在运行时动态替换默认的 spread 算法为更智能的 binpack…...

KubeBlocks:统一Operator管理多数据库,云原生数据基础设施的乐高积木

1. KubeBlocks:一个Operator管理所有数据库,云原生数据基础设施的“乐高积木”如果你是一名在Kubernetes上管理数据库的工程师,或者正在考虑将应用和数据库都迁移到K8s上,那你一定对“Operator”这个词不陌生。MySQL有MySQL Opera…...

不止于FIX:从金融信息交换协议看STEP、FAST与Binary协议的演进与选型

不止于FIX:从金融信息交换协议看STEP、FAST与Binary协议的演进与选型 在金融交易系统的技术架构中,通信协议的选择往往决定着系统的性能上限与扩展边界。当每秒需要处理数十万笔订单的交易所系统因协议冗余导致网络拥堵,或是跨境交易因协议兼…...

当Android遇上Python:用Chaquopy给你的App装上AI大脑(从环境搭建到调用实战)

当Android遇上Python:用Chaquopy给你的App装上AI大脑(从环境搭建到调用实战) 在移动应用开发领域,Android与Python的结合正开辟出一条令人兴奋的新路径。想象一下,你的相机应用不仅能拍照,还能实时识别画面…...

Cadence许可证季度审计标准化操作流程

你还在为Cadence许可被抢而头疼吗?刚处理完一个项目,晚上加班还没抢到许可,连着两天的画图进度全卡在那儿。讲真,这种事在俺们这种靠仿真设计吃饭的厂子里,业已太常见了。别急,今儿个咱们不聊焦虑&#xff…...

‌中职院校如何挑选合适的学工管理平台?这几条要点帮你避开选型误区‌

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

告别默认配色!用scCustomize和viridis包,让你的单细胞FeaturePlot颜值飙升(附完整代码)

单细胞数据可视化美学革命:scCustomize与viridis包实战指南 当你的单细胞测序分析进入可视化阶段,是否曾为那些千篇一律的默认图表感到沮丧?学术期刊和顶级会议上那些令人眼前一亮的FeaturePlot究竟是如何炼成的?本文将带你突破Se…...

STM32 I2C LCD 1602驱动:嵌入式显示系统的架构设计与实现原理

STM32 I2C LCD 1602驱动:嵌入式显示系统的架构设计与实现原理 【免费下载链接】stm32-i2c-lcd-1602 STM32: LCD 1602 w/ I2C adapter usage example 项目地址: https://gitcode.com/gh_mirrors/st/stm32-i2c-lcd-1602 在嵌入式系统开发中,LCD 160…...

告别龟速!保姆级教程:用XDown下载器满速下载小米官方ROM(附128线程设置)

突破下载瓶颈:XDown工具全场景加速实战指南 每次盯着进度条像蜗牛一样爬行,那种焦灼感想必每个下载大文件的用户都深有体会。特别是当我们需要获取系统镜像、游戏资源或高清影片时,传统的单线程下载方式往往让人望眼欲穿。今天要介绍的XDown&…...

告别正点原子模板!在STM32CubeIDE环境下为DS18B20编写更优雅的HAL库驱动(附工程)

在STM32CubeIDE中构建工业级DS18B20驱动:从模块化设计到HAL库最佳实践 对于已经掌握STM32基础开发的工程师而言,如何将传感器驱动从"能工作"升级到"好维护"是一个关键的技术跃迁。DS18B20作为经典的单总线温度传感器,其…...

【2026实战】Go与Python Agent通信机制:gRPC与消息队列深度解析

系列第7篇:Python+Go构建企业级AI Agent实战指南(7/13) 标签: Go | Python | gRPC | RabbitMQ | 通信机制 一、开篇:双栈通信的核心挑战 Python负责AI推理,Go负责基础设施——这是2026年的主流架构。但两者如何高效通信? 核心挑战: 性能:Python GIL限制,如何充分利…...

别再手动转字段了!Spring Boot 2.7.x 里 Jackson 全局下划线转驼峰,一个配置就搞定

Spring Boot 2.7.x全局命名策略:告别字段转换的重复劳动 在前后端分离架构成为主流的今天,数据格式的统一却成了开发者们日常的痛点。每当看到代码中散落各处的JsonProperty注解,或是为了适配不同系统的命名规范而编写的转换工具类&#xff0…...

手把手教你用Verilog在FPGA上实现BT656视频流解码(附完整代码与仿真波形)

FPGA实战:BT656视频流解码全流程解析与代码实现 第一次接触BT656视频流解码时,我盯着示波器上那些看似随机的数据波形,完全无法理解如何从中提取出有用的图像信息。直到亲手实现了一个完整的解码模块后,才发现这套标准背后的精妙设…...

3个原因告诉你为什么Anime4K是动画爱好者的最佳选择

3个原因告诉你为什么Anime4K是动画爱好者的最佳选择 【免费下载链接】Anime4K A High-Quality Real Time Upscaler for Anime Video 项目地址: https://gitcode.com/gh_mirrors/an/Anime4K 当你在4K大屏上重温经典动画时,是否曾为模糊的画质感到遗憾&#xf…...

ChatGPT卡顿修复:虚拟滚动技术原理与实战应用

1. 项目概述:告别卡顿,让长对话飞起来 如果你经常和ChatGPT进行深度、长篇的对话,尤其是在进行代码审查、长文写作或者多轮迭代式提问时,一定遇到过这样的场景:随着对话轮数增加,页面滚动开始变得迟滞&…...

YOLOv8分割模型上板实战:RK3588、旭日X3派、Jetson部署效率对比与优化心得

YOLOv8分割模型跨平台部署实战:RK3588、旭日X3派与Jetson的深度对比 在边缘计算设备上部署视觉分割模型时,硬件选型往往让开发者陷入两难——NPU的高能效比与GPU的通用性该如何取舍?本文将基于YOLOv8-Seg模型,在瑞芯微RK3588、地平…...

利用 Taotoken 多模型聚合能力构建智能客服系统

利用 Taotoken 多模型聚合能力构建智能客服系统 1. 智能客服系统的模型选型挑战 现代智能客服系统需要处理多样化的用户咨询场景,从简单的FAQ问答到复杂的售后问题解决。单一模型往往难以覆盖所有需求,企业通常需要组合多个擅长不同领域的模型。传统方…...

GD32F303高级定时器驱动三相无刷电机:从寄存器配置到互补PWM实战(附完整代码)

GD32F303高级定时器驱动三相无刷电机:从寄存器配置到互补PWM实战 在无人机、机器人伺服系统和工业自动化领域,三相无刷电机(BLDC)凭借高效率、长寿命和低噪音等优势,正逐步取代传统有刷电机。而实现精准控制的核心&…...

AI辅助设计:核心工具与实践指南

设计行业正在经历一场由人工智能驱动的深刻变革。传统设计流程中反复修改、素材难寻、效率受限等问题,在AI技术的介入下正在得到系统性解决。从海报生成到智能抠图,从配色推荐到版式优化,AI辅助设计工具已经渗透到商业视觉创作的各个环节。以…...

Spring Cloud Gateway + Swagger 3.0 实战:5分钟搞定微服务API文档聚合与安全访问

Spring Cloud Gateway Swagger 3.0 极速实践:微服务文档聚合与安全控制全指南 微服务架构下,API文档的集中管理一直是开发团队的痛点。想象一下:当你有20个微服务时,难道要记住20个不同的Swagger地址?更糟的是&#x…...

UE4SS终极指南:解锁虚幻引擎游戏修改的无限可能

UE4SS终极指南:解锁虚幻引擎游戏修改的无限可能 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE…...