当前位置: 首页 > article >正文

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序

原理:
在 x86 系统里使用交叉编译工具链(arm 版 gcc/g++)编译程序,然后放在 arm 系统里运行。

arm 版本

使用 lscpu 查看 cpu 架构

版本说明
armv732 bit
armv8/arrch6464 bit

安装交叉编译工具链

# 针对 armv7
sudo apt install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi -y

# 针对 armv8
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu -y

选用 arm 版 gcc/g++

gcc/g++ 路径安装后根据版本不同可能有所不同,可以在 /usr/bin 路径下查找具体的路径,使用命令 ll /usr/bin | grep gccll /usr/bin | grep g++

sudo apt install software-properties-common -y

# 针对 armv7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-arm-linux-gnueabi 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-arm-linux-gnueabi 50
# 运行以下命令,并选用 gcc-arm-linux-gnueabi
sudo update-alternatives --config gcc
# 运行以下命令,并选用 g++-arm-linux-gnueabi
sudo update-alternatives --config g++

# 针对 armv8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-aarch64-linux-gnu 50
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-aarch64-linux-gnu 50
# 运行以下命令,并选用 gcc-aarch64-linux-gnu
sudo update-alternatives --config gcc
# 运行以下命令,并选用 g++-aarch64-linux-gnu
sudo update-alternatives --config g++

编译

使用 cmake 正常编译代码即可(cmake 无需特地安装 arm 版)

检查可执行文件

# 识别文件格式
file run_file
# run_file: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=cc4640c27231b9ce99e86a944ffe7e96b5db0c3f, for GNU/Linux 3.7.0, not stripped

# 检查依赖库
ldd run_file
# linux-vdso.so.1 (0x0000007fa2f7f000)
# libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007fa2d00000)
# libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fa2b50000)
# libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fa2ab0000)
# /lib/ld-linux-aarch64.so.1 (0x0000007fa2f46000)
# libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007fa2a80000)

http://www.kler.cn/news/357928.html

相关文章:

  • JS通过递归函数来剔除树结构特定节点
  • C/C++每日一练:合并两个有序数组
  • 【iOS】AFNetworing初步学习
  • openresty“热部署“lua
  • 【Linux】如何通过系统宏定义,获取进程的退出码或退出信号
  • 使用Python在Jupyter Notebook中显示Markdown文本
  • 前端工程师面试题整理
  • 【C语言教程】【嵌入式编程】(一)介绍与前提条件(二)嵌入式编程基础(三)硬件基础知识(四)硬件寄存器操作
  • linux运行openfoam并行会报错:attempt to run parallel on 1 processor
  • 多个版本的GCC(GNU编译器集合)可以同时安装并存
  • 官龙村捐赠图书整理有感
  • Next.js 学习 - 生命周期
  • Docker技术深度解析与实战案例
  • Java中的String类
  • K8s-pod控制器HPA、DS、Job、CJ
  • 【GeekBand】C++设计模式笔记8_Factory Method_工厂方法
  • Android判断蓝牙设备类型
  • 运算符优先级有没有通用原则?
  • 在 PostgreSQL 通过Select语句中动态生成 INSERT 和 UPDATE 语句
  • uniapp获取底部导航tabbar的高度(H5)