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

ops/2024/10/23 23:47:48/

原理:
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/ops/127947.html

相关文章

如何使用OpenSSL创建RSA证书文件?

正文共:1024 字 7 图,预估阅读时间:1 分钟 我们前面介绍了如何通过Windows Server生成证书(Windows Server配置生成认证证书),也介绍了如何通过easy-RSA生成证书文件(使用Easy-RSA配置生成SSL证…

pdf文件怎样一张纸打印四页

在日常工作和学习中,我们经常会遇到需要将PDF文件中的多页内容合并打印到一张纸上的情况,比如将四页内容打印到一张A4纸上,以节省纸张和成本。同时,在打开pdf文件的方式,一般都是通过电脑浏览器打印,因此对…

【Redis】数据结构(下)

文章目录 QuickList概念QuickList结构QuickList的特点控制ZipList的大小对节点的ZipList进行压缩 总结 SkipList概念源码中结构分析总结 QuickList 概念 问题1:ZipList虽然节省内存,但是申请的内存必须是连续空间,如果内存占用过多,申请内存效率低,怎么办? 为了缓解这个问题,…

基于SSM+微信小程序的家庭记账本管理系统(家庭1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员端功能有首页、个人中心、用户管理,消费详情管理、收入详情管理、系统管理等。 2、用户端功能有首页、消费详情、收入详情、论坛信息、我的等功能。 2、项目技术 …

将图片转换为视频

方案一:使用Python和imageio库 介绍 Python是一种强大的编程语言,提供了多种库来处理图像和视频。imageio库是一个简单易用的库,可以轻松将图片序列转换为视频。 实现代码 import imageio import osdef images_to_video(image_folder, ou…

鸿蒙应用的Tabs 组件怎么使用

鸿蒙应用中的Tabs组件是一个用于通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。以下是Tabs组件的使用方法: 一、基本结构 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabB…

StarTowerChain:开启去中心化创新篇章

官网: www.startower.fr 在当今创新驱动的时代,StarTowerChain 以其独特的去中心化创新模式,为我们带来了新的希望和机遇。去中心化,这个充满活力与创造力的理念,正引领着我们走向未来的创新之路。 StarTowerChain …

uniapp修改input中placeholder样式

Uniapp官方提供了两种修改的属性方法&#xff0c;但经过测试&#xff0c;只有 placeholder-class 属性能够生效 <input placeholder"请输入手机验证码" placeholder-class"input-placeholder"/><!-- css --> <style lang"scss" s…