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

news/2024/10/23 18:10:31/

原理:
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/news/1541409.html

相关文章

2024Flutter面试题

1.Dart是值传递还是引用传递? dart是值传递。 每次调用函数,传递过去的都是对象的内存地址,而不是这个对象的赋值。 2.简述Dart语音特性 在Dart中,一切都是对象,所有的对象都是继承自Object Dart是强类型语言&#…

电感的学习

电感是表示电路中电流变化对电压影响的物理量,常用符号 LLL 表示。电感的基本公式可以从其定义和基本特性中得出,主要包括以下几个方面: 1. 电感的定义 2. 电感能量存储 3. 自感与互感 自感:电感器自身的电感,表示电…

《黑神话悟空》各章节boss顺序汇总

第一章BOSS顺序: 1、牯护院:犀牛精,位于苍狼岭娟,击败后能获得定身术。 2、广智:火刀狼, 位于观音禅院,击败后获得广智变身,记得敲钟。 3、蓝皮幽魂:蓝皮大头&#xff0…

【每日一题】【算法双周赛】【第 20 场 小白入门赛评价/分享】赛后另类AI写题分析分享

第 20 场 小白入门赛 1. 四个亲戚【算法赛】2. 黛玉泡茶【算法赛】AI分析具体实现代码解析复杂度分析示例运行 结果二 3. 宝玉请安【算法赛】AI分析问题分析路径计算代码实现代码解析示例运行复杂度分析 结果: 交上去 4. 贾母祝寿【算法赛】AI分析问题分析实现步骤代…

基于neo4j知识图谱的菜谱推荐系统

🍴 AI菜谱推荐系统让你“煮”事半功倍! 🍴 找不到做饭灵感的时候,是不是总觉得“今天吃啥”这道选择题简直是终极挑战?别急,我们基于Neo4j知识图谱的菜谱推荐系统,正是为了解决你的困扰而设计&a…

Flutter UI组件库(JUI)

Flutter UI组件库 (JUI) 介绍 您是否正在寻找一种方法来简化Flutter开发过程,并创建美观、一致的用户界面?您的搜索到此为止!我们的Flutter UI组件库(JUI)提供了广泛的预构建、可自定义组件,帮助您快速构建…

companion-关于kotlin中的Static

companion object {const val PARAMETER_ID: Short 506const val NULL_NAME: String ""const val MAP_NAME_LENGTH: Int 21const val SITE_NAME_LENGTH: Int 21} 这段代码定义了一个 companion object,其作用是在 Kotlin 类中创建静态成员&#xff0…

Zabbix进阶实战!将告警推送到Syslog服务器详细教程

需求场景: 用户需要将zabbix产生的告警事件推送给rsyslog服务器,syslog服务器再对事件日志进行分析处理. 环境配置信息 服务器 IP地址 ZabbixServer 192.168.200.195 Rsyslog服务器 192.168.200.128 *Rsyslog服务器防火墙需要放通 UDP/514端口 推送脚本…