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

embedded/2024/10/23 23:42:37/

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

arm__2">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__gccg_16">选用 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.ppmy.cn/embedded/129931.html

相关文章

借助keras的层知识理解理解神经网络层的构成相关概念

一、概述 机器学习中的神经网络也被称为人工神经网络(Artificial Neural Network, ANN),是一种受生物神经网络启发的数学模型,它试图模拟人脑中神经网络的工作方式来进行智能运算。 二、生物神经元及神经元构成的神经网络 下图…

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上,方便对BOM进行管理和修改,结果因为属性A和属性B不相同,导致导出的BOM错误。如下图: ​​ 本来我们需要导出Q12,结果给我们导出了Q13,或者反之&…

docker 同宿主机不同网络容器通信+跨宿主机容器之间网络互连详解

一 同宿主机不同网络容器通信 方法一:使用 Docker 网络连接 创建一个自定义桥接网络: 创建一个新的自定义桥接网络,然后将需要通信的容器连接到这个网络。docker network create my_custom_network 将容器连接到自定义网络: 将…

上拉电阻和下拉电阻在电路中的作用(一)

上拉电阻和下拉电阻在电路中的作用(一) 1.什么是上下拉电阻2.上下拉电阻的作用:2.1.维持输入引脚处于稳定状态。2.2.配合三极管和MOS进行电平转换电路设计2.3.OC、OD电路(Open Collector集电极开路、Open Drain漏电极开路&#xf…

开源的存储引擎--cantian

cantian 上次稼先社会活动之后,在北京签售的时候见到了三位参天的核心人物。我有感于他们的热情、务实和坦诚,我觉得还应该在深入的做一些事情。至少可以安装体验一下,做做推广。毕竟现在务实的产品不多了,很多都是浮躁的宣传。为…

vuex3入门

vue2 对应的 vuex、vue-router 都为3. 项目创建与框架安装 vue create hellovuex3 npm i vuex3 npm install npm run serve vuex使用 vue集成vuex,数据更新&展示 新建store/index.js import Vue from vue import Vuex from vuexVue.use(Vuex)const store n…

IT运维的365天--017 如何在两台Linux服务器之间快速批量传输文件夹(同时设置免密)

前情提要(两台Linux服务器之间传输批量文件夹): 两台都是外网服务器,都是Linux系统(CentOS),都安装了宝塔,用于搭建巨量的静态网站,由于A服务器准备不要了,所以要在A服务器转移几百个静态网站到B服务器。 Linux下scp单命令传输文件夹测试: 准备工作,先测试转移一…

Cursor零基础小白教程系列 - 开卷有益

最适合小白零基础的Cursor教程 网站lookai.top相同作者,最新文章会在网站更新,欢迎收藏书签 写在前面的话 Cursor在我看来 我认为当下AI时代,Cursor能够极大赋能每个普通人,帮助每个普通人实现自己的创意和想法。 例子&#xff…