ubuntu x86_64架构的编译 aarch64架构的程序

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
相关推荐
分布式存储与RustFS1 小时前
RustFS 该跟 stable 还是 nightly?两条版本线的分工、风险与回退,一张表说清
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
拂拉氏1 小时前
【知识讲解】 Linux进程间通信之管道与共享内存
linux·进程间通信
其实防守也摸鱼1 小时前
Linux文本处理命令理论学习
linux·服务器·前端·数据库·sql·学习·安全
无足鸟ICT1 小时前
【RHCA+】rpm命令(安装、升级、卸载和查询)
linux·运维·服务器
吹什么轩1 小时前
linux系统复习:从冯·诺依曼到操作系统:一切的开场
linux·运维·服务器
程序员-Benothing1 小时前
SSH从入门到精通:密钥登录、config配置、跳板机
linux·运维·服务器·ssh
Elastic 中国社区官方博客2 小时前
Jina AI:Elasticsearch 集成
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索·jina
H.莓飛2 小时前
【Linux】自主 Shell
linux·运维·服务器·c语言·开发语言·visual studio
bigcarp2 小时前
Frida-dexdump 绕过app的Root检测
linux·运维·服务器