【随笔记】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

    shell 复制代码
     PKG_NAME:=mosquitto
    -PKG_VERSION:=1.4.8
    +PKG_VERSION:=2.0.18
     PKG_RELEASE:=1
     PKG_LICENSE:=BSD-3-Clause
     PKG_LICENSE_FILES:=LICENSE.txt
     
     PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
     PKG_SOURCE_URL:=http://mosquitto.org/files/source/
    -PKG_MD5SUM:=d859cd474ffa61a6197bdabe007b9027
    +PKG_MD5SUM:=7fe95d0bef1aacd291d21d7752fbd21b
     PKG_BUILD_DIR:=$(COMPILE_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
  3. 编译提示没有找到 cJSON.h 文件,两种解法,要么增加 cJSON 包,要么屏蔽,这里取后者。

    shell 复制代码
    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
    shell 复制代码
     # Applies to all...
     MAKE_FLAGS += WITH_DOCS=no
    +MAKE_FLAGS += WITH_CJSON=no
     ifeq ($(BUILD_VARIANT),nossl)
     	MAKE_FLAGS += WITH_TLS=no WITH_WEBSOCKETS=no
     else
     	MAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")
     endif
  4. 提示缺少 pthread_、dlopen 等等相关接口未定义,没有指定链接库 lpthread、-ldl

    shell 复制代码
    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'
    shell 复制代码
     # 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=no
     else
     	MAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")
     endif
  5. 提示没有找到 mosquitto_passwd 文件,是因为新版本的源代码目录结构发生改变。

    shell 复制代码
    install: cannot stat 'out/r818-evb1/compile_dir/target/mosquitto-ssl/mosquitto-2.0.18/src/mosquitto_passwd': No such file or directory
    shell 复制代码
     # This installs files into ./staging_dir/. so that you can cross compile from the host
     define 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 文件,是因为新版本的源代码目录结构发生改变。

    shell 复制代码
    cp: cannot stat 'out/r818-evb1/compile_dir/target/mosquitto-ssl/mosquitto-2.0.18/lib/mosquitto.h': No such file or directory
    shell 复制代码
     # This installs files into ./staging_dir/. so that you can cross compile from the host
     define 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

完整补丁

shell 复制代码
--- package\network\mosquitto\Makefile	
+++ package\network\mosquitto\Makefile.bak	
@@ -6,20 +6,20 @@
 # See /LICENSE for more information.
 #
 
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mosquitto
-PKG_VERSION:=1.4.8
+PKG_VERSION:=2.0.18
 PKG_RELEASE:=1
 PKG_LICENSE:=BSD-3-Clause
 PKG_LICENSE_FILES:=LICENSE.txt
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://mosquitto.org/files/source/
-PKG_MD5SUM:=d859cd474ffa61a6197bdabe007b9027
+PKG_MD5SUM:=7fe95d0bef1aacd291d21d7752fbd21b
 PKG_BUILD_DIR:=$(COMPILE_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
 
 include $(BUILD_DIR)/package.mk
 
 define Package/$(PKG_NAME)/default
   SECTION:=net
@@ -168,13 +168,13 @@
 endef
 
 define 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/bin
 endif
 endef
 
 define 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 @@
 endef
 Package/mosquitto-client-nossl/install = $(Package/mosquitto-client/install)
 
 # This installs files into ./staging_dir/. so that you can cross compile from the host
 define 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.so
 endef
 
 # 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=no
 else
 	MAKE_FLAGS += WITH_WEBSOCKETS=$(if $(CONFIG_MOSQUITTO_LWS),"yes","no")
 endif
相关推荐
齐尹秦几秒前
HTML 插件学习笔记
笔记
昔柯的修炼日记14 分钟前
Python3 学习笔记
笔记·学习
郭涤生7 小时前
Chapter 11: Stream Processing_《Designing Data-Intensive Application》
笔记·分布式
V---scwantop---信11 小时前
现代科幻赛博朋克风品牌海报电子竞技设计无衬线英文字体 Glander – Techno Font
笔记·字体
WDeLiang12 小时前
Flask学习笔记 - 模板渲染
笔记·学习·flask
明月清了个风13 小时前
数据结构与算法学习笔记----贪心区间问题
笔记·学习·算法·贪心算法
因为奋斗超太帅啦13 小时前
MySQL学习笔记(一)——MySQL下载安装配置
笔记·学习·mysql
aoxiang_ywj13 小时前
【Linux】内核驱动学习笔记(二)
linux·笔记·学习
Moonnnn.14 小时前
运算放大器(五)电压比较器
笔记·学习·硬件工程
kfepiza15 小时前
`accept_ra` 和 `autoconf` 和 `forwarding` 的关系 笔记250404
linux·网络·笔记·tcp/ip·智能路由器·ip·tcp