Tina 原生包不支持添加 Mqtt,现在手动添加进去。

在tina4.0中添加三方包分两步:

  • (1) 将下载好的paho.mqtt.c-1.3.13.zip放到dl中。(https://codeload.github.com/eclipse-paho/paho.mqtt.c/zip/refs/tags/v1.3.13)
  • (2) 在package/libs/libpaho-mqtt中新建Makefile。

就用1.3.13,其他的CMake版本不适配。

这样就可以在 make menuconfig 里面选择了:

在这里插入图片描述

下载:git clone https://github.com/eclipse/paho.mqtt.c.git

文件:tina-sdk/package/libs/libpaho-mqtt/Makefile

#
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

include $(TOPDIR)/rules.mk

# 库基本信息
PKG_NAME:=libpaho-mqtt
PKG_VERSION:=1.3.13
PKG_RELEASE:=1
PKG_LICENSE:=EPL-2.0
PKG_SOURCE_URL:=https://github.com/eclipse-paho/paho.mqtt.c/archive/refs/tags/v$(PKG_VERSION).zip
PKG_SOURCE:=paho.mqtt.c-$(PKG_VERSION).zip
CMAKE_INSTALL:=1
PKG_HASH:=07a875...

PKG_BUILD_DIR := $(COMPILE_DIR)/paho.mqtt.c-$(PKG_VERSION)

include $(BUILD_DIR)/package.mk
include $(BUILD_DIR)/cmake.mk

TARGET_LDFLAGS += -ldl

# 定义库在 menuconfig 中的信息
define Package/libpaho-mqtt
    SECTION:=libs
    CATEGORY:=Libraries
    TITLE:=Eclipse Paho MQTT C Client Library
    URL:=https://github.com/eclipse/paho.mqtt.c
    DEPENDS:=+libc +libpthread +libopenssl
endef

define Package/libpaho-mqtt/description
  Eclipse Paho MQTT C client library for MQTT 3.1/3.1.1
endef

# CMake 配置选项
define Build/Configure
	$(call Build/Configure/Default, \
		-DPAHO_WITH_SSL=TRUE \
		-DPAHO_BUILD_STATIC=FALSE \
		-DPAHO_BUILD_SHARED=TRUE \
		-DPAHO_BUILD_DOCUMENTATION=FALSE \
		-DPAHO_BUILD_SAMPLES=FALSE \
		-DPAHO_ENABLE_TESTING=FALSE \
	)
endef

define Build/InstallDev
	$(INSTALL_DIR) $(1)/usr/include
	$(CP) $(PKG_BUILD_DIR)/src/*.h $(1)/usr/include/
  
	$(INSTALL_DIR) $(1)/usr/lib
	#$(CP) $(PKG_BUILD_DIR)/build/output/libpaho-mqtt3*.so* $(1)/usr/lib/
	# 从 ipkg-install 目录复制库文件(标准 OpenWrt 路径)
	$(CP) $(PKG_BUILD_DIR)/ipkg-install/usr/lib/libpaho-mqtt3*.so* $(1)/usr/lib/
endef

# 安装库到目标系统
define Package/libpaho-mqtt/install
	$(INSTALL_DIR) $(1)/usr/lib
#	$(CP) $(PKG_BUILD_DIR)/build/output/libpaho-mqtt3*.so* $(1)/usr/lib/
	# 从 ipkg-install 目录复制库文件(标准 OpenWrt 路径)
	$(CP) $(PKG_BUILD_DIR)/ipkg-install/usr/lib/libpaho-mqtt3*.so* $(1)/usr/lib/
endef

# 注意:这一行必须顶格写,前面不能有任何空格或制表符!
$(eval $(call BuildPackage,libpaho-mqtt))

测试–可以独立编译的完整工程

taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13$ mkdir mqtt-test
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13$ cd mqtt-test/
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ cp -r ../paho.mqtt.c-1.3.13/src ./
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ ls
src
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ cp src/samples/MQTTAsync_subscribe.c ./
taiji@ubuntu:~/Liefyuan/paho-mqtt-1.3.13/mqtt-test$ ls
MQTTAsync_subscribe.c  src

.
├── build
├── main.c # MQTTAsync_subscribe.c 这个例程改的 main.c
├── Makefile
├── mqtt-sub-test
├── src
├── t113-pi # tina-sdk/out/t113-pi/staging_dir 整个都拷贝过来依赖和库都在这里面
└── toolchain-sunxi-musl # 交叉编译器也拷贝过来

Makefile文件:

#
# Makefile
#
CC = ./toolchain-sunxi-musl/toolchain/bin/arm-openwrt-linux-gcc
LVGL_DIR_NAME ?= mqtt-test
LVGL_DIR ?= ${shell pwd}
CFLAGS ?= -O3 -g0 -I$(LVGL_DIR)/ -Wall -Wshadow -Wundef -Wmissing-prototypes -Wno-discarded-qualifiers -Wall -Wextra -Wno-unused-function -Wno-error=strict-prototypes -Wpointer-arith -fno-strict-aliasing -Wno-error=cpp -Wuninitialized -Wmaybe-uninitialized -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wno-cast-qual -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wformat-security -Wno-ignored-qualifiers -Wno-error=pedantic -Wno-sign-compare -Wdouble-promotion -Wclobbered -Wdeprecated -Wempty-body -Wtype-limits -Wshift-negative-value -Wstack-usage=2048 -Wno-unused-value -Wno-unused-parameter -Wno-missing-field-initializers -Wuninitialized -Wmaybe-uninitialized -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wtype-limits -Wsizeof-pointer-memaccess -Wno-format-nonliteral -Wpointer-arith -Wno-cast-qual -Wmissing-prototypes -Wunreachable-code -Wno-switch-default -Wreturn-type -Wmultichar -Wno-discarded-qualifiers -Wformat-security -Wno-ignored-qualifiers -Wno-sign-compare
LDFLAGS ?= -lpaho-mqtt3a
BIN = mqtt-sub-test

# 定义build目录
BUILD_DIR = build
# 最终可执行文件的路径
TARGET = $(LVGL_DIR)/$(BIN)

TARGETCONFIG_PREFIX = ./t113-pi/staging_dir/target
INCLUDES += -I$(TARGETCONFIG_PREFIX)/usr/include
CFLAGS += $(INCLUDES)

STAGING_DIR :=TARGETCONFIG_PREFIX
export STAGING_DIR

LIB_PATH += $(TARGETCONFIG_PREFIX)/usr/lib/
LDFLAGS += -L$(LIB_PATH)

# 创建build目录的函数
CREATE_BUILD_DIR = @mkdir -p $(BUILD_DIR)

#Collect the files to compile
MAINSRC = ./main.c


OBJEXT ?= .o

# 获取所有源文件列表
ALL_SRCS = $(ASRCS) $(CSRCS) $(MAINSRC)
# 生成对应的目标文件路径(保持目录结构)
AOBJS = $(patsubst %.S,$(BUILD_DIR)/%.o,$(ASRCS))
COBJS = $(patsubst %.c,$(BUILD_DIR)/%.o,$(CSRCS))
MAINOBJ = $(patsubst %.c,$(BUILD_DIR)/%.o,$(MAINSRC))

# 所有目标文件
OBJS = $(AOBJS) $(COBJS) $(MAINOBJ)

# 创建必要的子目录
DIRS = $(sort $(dir $(OBJS)))

all: dirs default

# 创建所有需要的子目录
dirs:
	@mkdir -p $(DIRS)
	@echo "Created directories: $(DIRS)"

# 编译规则:从源文件编译到build目录下的对应位置
$(BUILD_DIR)/%.o: %.c
	@mkdir -p $(dir $@)
	@$(CC) $(CFLAGS) -c $< -o $@
	@echo "CC $< -> $@"

$(BUILD_DIR)/%.o: %.S
	@mkdir -p $(dir $@)
	@$(CC) $(CFLAGS) -c $< -o $@
	@echo "AS $< -> $@"

default: $(OBJS)
	@mkdir -p $(BUILD_DIR)
	$(CC) -o $(TARGET) $(OBJS) $(LDFLAGS)
	@echo "LINK $(TARGET)"
	@echo "Build completed: $(TARGET)"

clean:
	rm -rf $(BUILD_DIR)
	@echo "Clean completed"

# 调试信息:显示所有源文件和目标文件
info:
	@echo "Source files:"
	@echo "  ASRCS: $(ASRCS)"
	@echo "  CSRCS: $(CSRCS)"
	@echo "  MAINSRC: $(MAINSRC)"
	@echo ""
	@echo "Object files in $(BUILD_DIR):"
	@echo "  OBJS: $(OBJS)"
	@echo ""
	@echo "Directories to create:"
	@echo "  $(DIRS)"
	@echo ""
	@echo "Target: $(TARGET)"

# 打印具体的编译规则信息
debug:
	@echo "Compilation rules:"
	@for src in $(ALL_SRCS); do \
		echo "$$src -> $(BUILD_DIR)/$${src%.*}.o"; \
	done

报错

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐