【随笔记】Tina 移植 Mosquitto v2.0.18 版本

移植过程

  1. 从官方源码库里面找到最新的版本 v2.0.18 并下载下来计算 md5 值

    https://mosquitto.org/files/source/mosquitto-2.0.18.tar.gz

  2. 修改顶层 Makefie:package\network\mosquitto\Makefile

     PKG_NAME:=mosquitto
    -PKG_VERSION:=1.4.8
    +PKG_VERSION:=2.0.18PKG_RELEASE:=1PKG_LICENSE:=BSD-3-ClausePKG_LICENSE_FILES:=LICENSE.txtPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gzPKG_SOURCE_URL:=http://mosquitto.org/files/source/
    -PKG_MD5SUM:=d859cd474ffa61a6197bdabe007b9027
    +PKG_MD5SUM:=7fe95d0bef1aacd291d21d7752fbd21bPKG_BUILD_DIR:=$(COMPILE_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
    
  3. 编译提示没有找到 cJSON.h 文件,两种解法,要么增加 cJSON 包,要么屏蔽,这里取后者。

    In file included from mosquitto_ctrl.c:19:0:
    ../../config.h:86:27: fatal error: cjson/cJSON.h: No such file or directory#  include <cjson/cJSON.h>^
    compilation terminated.
    make[5]: *** [mosquitto_ctrl.o] Error 1
    
     # Applies to all...MAKE_FLAGS += WITH_DOCS=no
    +MAKE_FLAGS += WITH_CJSON=noifeq ($(BUILD_VARIANT),nossl)MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=noelseMAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")endif
    
  4. 提示缺少 pthread_、dlopen 等等相关接口未定义,没有指定链接库 lpthread、-ldl

    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_rwlock_destroy@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_setspecific@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_rwlock_init@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_key_create@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `dlopen@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `dlsym@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `dlclose@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `dladdr@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_rwlock_rdlock@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `dlerror@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_rwlock_unlock@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_getspecific@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_rwlock_wrlock@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_key_delete@GLIBC_2.17'
    out/r818-evb1/staging_dir/target/usr/lib/libcrypto.so: undefined reference to `pthread_once@GLIBC_2.17'
    
     # Applies to all...MAKE_FLAGS += WITH_DOCS=noMAKE_FLAGS += WITH_CJSON=no
    +
    +MAKE_FLAGS += \
    +	FPIC="$(FPIC)" \
    +	CFLAGS="$(TARGET_CFLAGS)" \
    +	LDFLAGS="$(TARGET_LDFLAGS) -lpthread -ldl"
    +ifeq ($(BUILD_VARIANT),nossl)MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=noelseMAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")endif
    
  5. 提示没有找到 mosquitto_passwd 文件,是因为新版本的源代码目录结构发生改变。

    install: cannot stat 'out/r818-evb1/compile_dir/target/mosquitto-ssl/mosquitto-2.0.18/src/mosquitto_passwd': No such file or directory
    
     # This installs files into ./staging_dir/. so that you can cross compile from the hostdefine Build/InstallDev$(INSTALL_DIR) $(1)/usr/include
    -	$(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include
    +	$(CP) $(PKG_BUILD_DIR)/include/mosquitto.h $(1)/usr/include$(CP) $(PKG_BUILD_DIR)/lib/cpp/mosquittopp.h $(1)/usr/include$(INSTALL_DIR) $(1)/usr/lib
    
  6. 提示没有找到 mosquitto.h 文件,是因为新版本的源代码目录结构发生改变。

    cp: cannot stat 'out/r818-evb1/compile_dir/target/mosquitto-ssl/mosquitto-2.0.18/lib/mosquitto.h': No such file or directory
    
     # This installs files into ./staging_dir/. so that you can cross compile from the hostdefine Build/InstallDev$(INSTALL_DIR) $(1)/usr/include
    -	$(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include
    +	$(CP) $(PKG_BUILD_DIR)/include/mosquitto.h $(1)/usr/include$(CP) $(PKG_BUILD_DIR)/lib/cpp/mosquittopp.h $(1)/usr/include
    

完整补丁

--- package\network\mosquitto\Makefile	
+++ package\network\mosquitto\Makefile.bak	
@@ -6,20 +6,20 @@# See /LICENSE for more information.#include $(TOPDIR)/rules.mkPKG_NAME:=mosquitto
-PKG_VERSION:=1.4.8
+PKG_VERSION:=2.0.18PKG_RELEASE:=1PKG_LICENSE:=BSD-3-ClausePKG_LICENSE_FILES:=LICENSE.txtPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gzPKG_SOURCE_URL:=http://mosquitto.org/files/source/
-PKG_MD5SUM:=d859cd474ffa61a6197bdabe007b9027
+PKG_MD5SUM:=7fe95d0bef1aacd291d21d7752fbd21bPKG_BUILD_DIR:=$(COMPILE_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)include $(BUILD_DIR)/package.mkdefine Package/$(PKG_NAME)/defaultSECTION:=net
@@ -168,13 +168,13 @@endefdefine Package/mosquitto/install$(call Package/mosquitto/install/default,$(1))ifeq ($(CONFIG_MOSQUITTO_PASSWD),y)$(INSTALL_DIR) $(1)/usr/bin
-	$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mosquitto_passwd $(1)/usr/bin
+	$(INSTALL_BIN) $(PKG_BUILD_DIR)/apps/mosquitto_passwd/mosquitto_passwd $(1)/usr/binendifendefdefine Package/mosquitto-client/install$(INSTALL_DIR) $(1)/usr/bin$(INSTALL_BIN) $(PKG_BUILD_DIR)/client/mosquitto_pub $(1)/usr/bin/mosquitto_pub
@@ -182,13 +182,13 @@endefPackage/mosquitto-client-nossl/install = $(Package/mosquitto-client/install)# This installs files into ./staging_dir/. so that you can cross compile from the hostdefine Build/InstallDev$(INSTALL_DIR) $(1)/usr/include
-	$(CP) $(PKG_BUILD_DIR)/lib/mosquitto.h $(1)/usr/include
+	$(CP) $(PKG_BUILD_DIR)/include/mosquitto.h $(1)/usr/include$(CP) $(PKG_BUILD_DIR)/lib/cpp/mosquittopp.h $(1)/usr/include$(INSTALL_DIR) $(1)/usr/lib$(CP) $(PKG_BUILD_DIR)/lib/libmosquitto.so.1 $(1)/usr/lib/$(CP) $(PKG_BUILD_DIR)/lib/cpp/libmosquittopp.so.1 $(1)/usr/lib/$(LN) libmosquitto.so.1 $(1)/usr/lib/libmosquitto.so$(LN) libmosquittopp.so.1 $(1)/usr/lib/libmosquittopp.so
@@ -207,12 +207,19 @@$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/cpp/libmosquittopp.so.1 $(1)/usr/lib/$(LN) libmosquittopp.so.1 $(1)/usr/lib/libmosquittopp.soendef# Applies to all...MAKE_FLAGS += WITH_DOCS=no
+MAKE_FLAGS += WITH_CJSON=no
+
+MAKE_FLAGS += \
+	FPIC="$(FPIC)" \
+	CFLAGS="$(TARGET_CFLAGS)" \
+	LDFLAGS="$(TARGET_LDFLAGS) -lpthread -ldl"
+ifeq ($(BUILD_VARIANT),nossl)MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=noelseMAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python学习笔记 - 标准库函数

概述 为了方便程序员快速编写Python脚本程序&#xff0c;Python提供了很多好用的功能模块&#xff0c;它们内置于Python系统&#xff0c;也称为内置函数(Built-in Functions&#xff0c;BlF)&#xff0c;Python 内置函数是 Python 解释器提供的一组函数&#xff0c;无需额外导…

人工智能在环境保护中的作用与价值

人工智能在环境保护中的作用与价值 人工智能技术在环境保护领域发挥着越来越重要的作用&#xff0c;其应用不仅可以提高环境监测和管理的效率&#xff0c;还能够帮助解决一些环境问题。以下是人工智能在环境保护中的作用与价值的几个方面&#xff1a; 1. 环境监测 人工智能技…

前端架构: 脚手架之使用Ora在终端中实现输出Loading

ora ora 它主要做的一件事情啊&#xff0c;就是去在命令行当中去输出loading的状态loading在web中容易实现&#xff0c;但是在终端中实现起来是非常复杂的安装 $ npm i -S ora可以看到其源码与chalk不同的是, 有很多第三方依赖库 1 &#xff09;基础用法 import ora from or…

[C++] 如何对列表(vector),字典(map)等进行排序

对列表(vector)进行排序 C中可以使用std::sort()函数对vector进行排序。 #include <iostream> #include <vector> #include <algorithm>int main() {std::vector<int> nums {4, 2, 8, 6, 5, 3, 1, 7};// 对vector进行升序排序std::sort(nums.begin(…

前端常见面试题之vue3

文章目录 1. vue3比vue2有哪些优势2. 描述vue3的生命周期3. 如何看待vue3中的Composition API 和 Options API4. 如何理解ref、 toRef、和toRefs?5. vue3升级了哪些功能6. Composition API如何实现代码逻辑的复用&#xff08;hook)7. Vue3如何实现响应式的8.Vue3使用Proxy对象…

计算机网络实验八 利用 Java /C++开发网络聊天应用程序

一、实验目的和要求 1)基本掌握利用 Java 开发环境调试应用程序的方法。 2)理解基于套接字开发网络应用程序的过程,深入理解客户/服务器方式工作原理。 3)掌握基于Java和C++开发网络通信程序的方法。 二、实验环境 1)运行 Windows 2008 Server/XP/7 操作系统的 PC 2 台…

vue基础操作(vue基础)

想到多少写多少把&#xff0c;其他的想起来了在写。也写了一些css的 input框的双向数据绑定 html <input value"123456" type"text" v-model"account" input"accou" class"bottom-line bottom" placeholder"请输入…

golang学习1,dea的golang-1.22.0

参考&#xff1a;使用IDEA配置GO的开发环境备忘录-CSDN博客 1.下载All releases - The Go Programming Language (google.cn) 2.直接next 3.window环境变量配置 4.idea的go插件安装 5.新建go项目找不到jdk解决 https://blog.csdn.net/ouyang111222/article/details/1361657…

c++高精度

高精度是什么 计算数据过大超过long long的数据范围时&#xff0c;需要引进高精度算法。将数一位一位的存在数组中输出。 高精度加法 #include<iostream> #include<cstring> using namespace std;int main() {char a1[10000], b1[10000];//字符存储数字int a[10…

React Native调用摄像头画面及拍照和保存图片到相册全流程

今天主要做了一个demo,功能很简单,就是调用手机摄像头画面,并且可以通过按钮控制拍照以及将图片保存到手机相册的功能,接下来我将从创建项目开始一步一步完成这个demo,各位只需要复制粘贴即可 创建React Native项目 npx react-native init yx_rnDemo --version 0.70.6 // 这里…

虚拟列表【vue】等高虚拟列表/非等高虚拟列表

文章目录 1、等高虚拟列表2、非等高虚拟列表 1、等高虚拟列表 参考文章1 参考文章2 <!-- eslint-disable vue/multi-word-component-names --> <template><divclass"waterfall-wrapper"ref"waterfallWrapperRef"scroll"handleScro…

280.【华为OD机试真题】高效货运(贪心算法—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-高效货运二.解题思路三.题解代码Python题解代码…

服务器相关概念1

客户端 网络节点中负责消耗资源的电脑 服务器 负责对外提供网络资源的电脑 服务器和普通电脑区别 服务器有web服务器软件&#xff0c;IIS&#xff0c;Apache&#xff0c;phpstudy IP地址 每台计算机唯一地址&#xff1b; 格式&#xff08;a.b.c.d&#xff09;点分时进制&…

unordered_map和map的区别

unordered_map 和 map 都是 C STL 中的关联数组容器&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。其中&#xff0c;键是唯一的&#xff0c;而值则可以重复。 它们的主要区别在于实现方式不同。map 实现了红黑树&#xff0c;因此可以自动按照键值排序&…

数据湖delta lake

Table of Content1. 课程2. 前置技能3. 一、数据湖概念[了解] 3.1. 1.1 企业的数据困扰 3.1.1. 困扰一&#xff1a;互联网的兴起和数据孤岛3.1.2. 困扰二&#xff1a;非结构化数据3.1.3. 困扰三&#xff1a;保留原始数据3.1.4. 补充&#xff1a;什么是结构化&#xff1f; 3.1.4…

09 Redis之分布式系统(数据分区算法 + 系统搭建与集群操作)

6 分布式系统 Redis 分布式系统&#xff0c;官方称为 Redis Cluster&#xff0c;Redis 集群&#xff0c;其是 Redis 3.0 开始推出的分布式解决方案。其可以很好地解决不同 Redis 节点存放不同数据&#xff0c;并将用户请求方便地路由到不同 Redis 的问题。 什么是分布式系统?…

音乐格式转换软件有哪些?5款必备神器

音乐格式转换软件有哪些&#xff1f;音乐&#xff0c;作为人类情感的载体&#xff0c;伴随着我们生活的每一个角落。在享受音乐的同时&#xff0c;我们有时也面临着音乐格式不兼容的问题。不用担心&#xff0c;今天我将为大家揭秘五款音乐格式转换软件&#xff0c;让你的音乐之…

华为配置Mesh普通业务示例

配置Mesh普通业务示例 组网图形 图1 配置Mesh组网示意图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 在企业内部各区域通过建立Mesh无线回传链路&#xff0c;实现无线覆盖区域拓展&#xff0c;降低有线部署成本。 组网需求 AC组网方式&#xff1a…

sqllabs的order by注入

当我们在打开sqli-labs的46关发现其实是个表格&#xff0c;当测试sort等于123时&#xff0c;会根据列数的不同来进行排序 我们需要利用这个点来判断是否存在注入漏洞&#xff0c;通过加入asc 和desc判断页面有注入点 1、基于使用if语句盲注 如果我们配合if函数&#xff0c;表达…

面试经典150题——存在重复元素 II

​"The harder you work for something, the greater youll feel when you achieve it." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 该思路很简单&#xff0c;就是暴力的查找每一个元素&#xff0c;查看是否满足题目要求&#xff0c;满足就…