Makefile的ARM交叉编译配置

「C++ 40 周年」主题征文大赛(有机会与C++之父现场交流!) 10w+人浏览 572人参与


有时候使用make命令执行交叉编译工作,能够比较方便的实现多个平台的编译,因此,本文给出了使用makefile交叉编译的方式,将原来x86架构的makefile可以实现ARM程序的交叉编译。
X86下交叉编译ARM程序

1.查找ARM交叉编译器路径

因为安装了QT交叉编译环境QT5.9.9+ARM交叉编译开发环境搭建【详细步骤】,所以比较方便查看配置的编译器路径,没有安装这个交叉编译环境,需要先参考教程安装。
本文的路径是:

交叉编译器路径
g++/opt/aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
gcc/opt/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc-7.5.0

2.修改Makefile文件

修改前务必将原来x86的Makefile备份。
本文的x86d的makefile文件样例如下:

CC = g++
STRIP = strip

Options = -g -lm -lrt -lpthread -fPIC -fopenmp

ProjectDir = .
ProjectLibDir = $(ProjectDir)/lib
ProjectObjDir = $(ProjectDir)/obj

...(省略)

$(OBJ_FIL_main): $(ProjectObjDir)/%.o: $(SRC_DIR_main)/%.cpp
	@mkdir -p $(ProjectObjDir)
	$(CC) $(Options) -c $< -o $@
$(OBJ_FIL_zlib): $(ProjectObjDir)/%.o: $(SRC_DIR_zlib)/%.c
	@mkdir -p $(ProjectObjDir)
	gcc -O2 -c $< -o $@

可以看到CC是默认的x86的C++编译器,下面还有gcc的默认编译器,
修改方式如下:

# 核心修改:指定交叉编译器(C++和C分别配置)
CC = /opt/aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
CC_C = /opt/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc-7.5.0  # 明确C交叉编译器版本
STRIP = /opt/aarch64-linux-gnu/bin/aarch64-linux-gnu-strip  # 交叉编译strip工具(可选,用于瘦身)
# 核心修改:添加 -static-libstdc++ 静态链接 libstdc++,避免运行时依赖系统库版本(可选,避免依赖库错误)
Options = -g -lm -lrt -lpthread -fPIC -fopenmp -static-libstdc++

ProjectDir = .
ProjectLibDir = $(ProjectDir)/lib
ProjectObjDir = $(ProjectDir)/obj

...(省略)

$(OBJ_FIL_main): $(ProjectObjDir)/%.o: $(SRC_DIR_main)/%.cpp
	@mkdir -p $(ProjectObjDir)
	$(CC) $(Options) -c $< -o $@
$(OBJ_FIL_zlib): $(ProjectObjDir)/%.o: $(SRC_DIR_zlib)/%.c
	@mkdir -p $(ProjectObjDir)
	$(CC_C) $(Options) -O2 -c $< -o $@  # 核心修改:使用指定版本的C交叉编译器

通过如上修改,可以实现makefile的交叉编译搭建,重命名此文件为makefile_arm64

3.交叉编译

一般来说如果文件夹只有一个makefile文件,直接执行make命令即可。
当有多个makefile文件时,就需要指定文件名

make -f makefile_arm64
//下面是执行伪目标
make -f makefile_arm64 clean

交叉编译后的检查:
例如程序名称为test
使用file命令可以查看交叉编译后的程序架构

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驯龙高手_追风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值