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
相关推荐
讯捷蓝达1 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.2 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落3 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨4 小时前
WSL2的安装与使用
linux·wsl
微小的鱼4 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng4 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹5 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_5 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_5 小时前
云原生基础之Containerd容器运行时
运维·云原生