移植过程
-
从官方源码库里面找到最新的版本 v2.0.18 并下载下来计算 md5 值
-
修改顶层 Makefie:package\network\mosquitto\Makefile
shellPKG_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)
-
编译提示没有找到 cJSON.h 文件,两种解法,要么增加 cJSON 包,要么屏蔽,这里取后者。
shellIn 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
-
提示缺少 pthread_、dlopen 等等相关接口未定义,没有指定链接库 lpthread、-ldl
shellout/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
-
提示没有找到 mosquitto_passwd 文件,是因为新版本的源代码目录结构发生改变。
shellinstall: 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
-
提示没有找到 mosquitto.h 文件,是因为新版本的源代码目录结构发生改变。
shellcp: 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