有时候使用make命令执行交叉编译工作,能够比较方便的实现多个平台的编译,因此,本文给出了使用makefile交叉编译的方式,将原来x86架构的makefile可以实现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命令可以查看交叉编译后的程序架构


3823

被折叠的 条评论
为什么被折叠?



