1.安装arm64的gcc g++
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
2.要修改makefile 和对应的链接的库 都要 是对应架构的 目录和库
bash
# ==============================================================================
# Created By QMCY @20260730
# ==============================================================================
# 默认值设置 (可以在命令行通过 make VAR=value 覆盖)
IO ?= NIO
MQTT ?=no
VERSION ?=V3
SDK ?= no
PARSER ?=JS_LEDV3
TOKEN ?= yes
TYPE ?= LED
SYNC ?= no
CLIENT ?= no
REDIS ?= no
WS ?=no
CC ?= g++
# x86_64 aarch64 armv7l
ARCH ?= $(shell uname -m)
# 2. 根据架构映射到库目录名
# 基础编译选项
CFLAGS := -std=c++14 -O0 -g -Wall
CFLAGS += -D QMCY_PARSER_HEADER=\"ISource$(PARSER).h\"
CFLAGS += -D QMCY_PARSER_CLASS=$(PARSER)
CFLAGS += -D QMCY_TYPE=\"$(TYPE)\"
LIBNAME += -lpthread -lzlog
LIBPATH += -L ./3rd/zlog/lib/$(ARCH)
LIBPATH += -L ./3rd/freetype2/lib/$(ARCH)
SRCS := QMCY_LED.cpp
SRCS += source/ISource$(PARSER).cpp
CFLAGS += -I ./3rd/zlog/include
CFLAGS += -I ./3rd/ioengine/include
CFLAGS += -I ./3rd/jsonxx
CFLAGS += -I ./source
ifeq ($(SYNC), yes)
CFLAGS += -D QMCY_HTTP_SYNC
endif
ifeq ($(CLIENT), yes)
CFLAGS += -D QMCY_CLIENT_DEVICES
endif
ifeq ($(MQTT), yes)
CFLAGS += -D QMCY_MQTT
endif
ifeq ($(REDIS), yes)
CFLAGS += -D QMCY_REDIS
CFLAGS += -I ./3rd/redis
LIBPATH += -L ./3rd/redis
LIBNAME += -lhiredis
endif
ifeq ($(SDK), yes)
LIBPATH += -L ./device/lxsj
LIBNAME += -lListenLedX3
endif
ifeq ($(VERSION), V1)
CFLAGS += -D QMCY_V1
else
VERSION = V3
endif
ifeq ($(WS), yes)
CFLAGS += -D QMCY_WEBSOCKET
endif
ifeq ($(IO), NIO)
CFLAGS += -D QMCY_NIO
else ifeq ($(IO), AIO)
CFLAGS += -D QMCY_NIO
CFLAGS += -D QMCY_AIO
LIBPATH += -L ./3rd/ioengine/lib
LIBNAME += -luring
else
CFLAGS += -D QMCY_SERIAL_OP
CFLAGS += -D QMCY_BIO
IO = BIO
endif
ifeq ($(TOKEN), yes)
CFLAGS += -D QMCY_TOKEN
CFLAGS += -I ./3rd/gmssl/include
LIBPATH += -L ./3rd/gmssl/lib/$(ARCH)
LIBNAME += -lgmssl
endif
SUBDIR_MAKEFILES := $(shell find . -mindepth 2 -type f -iname "module.mk")
include $(SUBDIR_MAKEFILES)
OBJS := $(SRCS:.cpp=.o)
EXEC := QMCY_$(IO)_$(TYPE)_$(ARCH)
.PHONY: all start clean showruntime
all: start
start: $(OBJS)
$(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBPATH) $(LIBNAME)
@echo "构建完成: $(EXEC)"
@echo "当前架构: $(ARCH)"
# 通用编译规则
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -rf $(OBJS)
@echo "清理完成"
showruntime:
@echo "=== 构建信息 ==="
@echo "可执行文件: $(EXEC)"
@echo "源文件列表:"
@echo "$(SRCS)"
@echo "编译选项:"
@echo "$(CFLAGS)"
# 交叉编译快捷目标
.PHONY: cross-aarch64
cross-aarch64:
$(MAKE) clean
$(MAKE) CC=aarch64-linux-gnu-g++ ARCH=aarch64 -j$(shell nproc)
顺带一个freetype的编译脚本
bash
./configure --prefix=/home/qmcy/freetype-2.13.3/install \
--without-png --without-bzip2 --without-brotli --without-zlib