上位机知识篇---四种CPU架构交叉编译
文章目录
- 前言
- 一、四种 CPU 架构
- 1. x86/x86_64
- 指令集
- 位宽:
- 应用场景
- 编译工具
- 2. ARM
- 指令集
- 位宽:
- 应用场景
- 编译工具
- 3. MIPS
- 指令集
- 位宽
- 应用场景
- 编译工具
- 4. RISC-V
- 指令集
- 位宽
- 应用场景
- 编译工具
- 二、交叉编译
- 1. 什么是交叉编译?
- 定义
- 应用场景
- 2. 交叉编译工具链
- 3. 交叉编译步骤
- (1) 安装工具链
- (2) 编写代码
- (3) 交叉编译
- (4) 验证可执行文件
- 4. 运行交叉编译的程序
- 三、总结
前言
本文简单介绍了一下,目前常见的四种CPU架构和交叉编译。
通过交叉编译工具链,开发者可以在一种架构的机器上为其他架构生成可执行文件,极大提高了开发效率。
一、四种 CPU 架构
1. x86/x86_64
指令集
指令集:CISC(复杂指令集)。
位宽:
x86:32 位。
x86_64:64 位(兼容 32 位)。
应用场景
应用场景:PC、服务器、高性能计算。
编译工具
GCC:
gcc -m32 -o program32 program.c # 编译为 32 位程序
gcc -m64 -o program64 program.c # 编译为 64 位程序
Clang:
clang -m32 -o program32 program.c
clang -m64 -o program64 program.c
2. ARM
指令集
指令集:RISC(精简指令集)。
位宽:
ARMv7:32 位。
ARMv8:64 位。
应用场景
应用场景:移动设备、嵌入式系统、物联网。
编译工具
GCC(ARM 工具链):
arm-linux-gnueabi-gcc -o program program.c # 32 位 ARM
aarch64-linux-gnu-gcc -o program program.c # 64 位 ARM
Clang:
clang --target=arm-linux-gnueabi -o program program.c # 32 位 ARM
clang --target=aarch64-linux-gnu -o program program.c # 64 位 ARM
3. MIPS
指令集
指令集:RISC(精简指令集)。
位宽
位宽:
MIPS32:32 位。
MIPS64:64 位。
应用场景
应用场景:嵌入式系统、网络设备(如路由器)。
编译工具
GCC(MIPS 工具链):
mips-linux-gnu-gcc -o program program.c # 32 位 MIPS
mips64-linux-gnuabi64-gcc -o program program.c # 64 位 MIPS
Clang:
clang --target=mips-linux-gnu -o program program.c # 32 位 MIPS
clang --target=mips64-linux-gnuabi64 -o program program.c # 64 位 MIPS
4. RISC-V
指令集
指令集:RISC(精简指令集),开源设计。
位宽
位宽:
RV32:32 位。
RV64:64 位。
应用场景
应用场景:嵌入式系统、学术研究、新兴硬件。
编译工具
编译工具
GCC(RISC-V 工具链):
riscv64-unknown-elf-gcc -o program program.c # 64 位 RISC-V
riscv32-unknown-elf-gcc -o program program.c # 32 位 RISC-V
Clang:
clang --target=riscv64 -o program program.c # 64 位 RISC-V
clang --target=riscv32 -o program program.c # 32 位 RISC-V
二、交叉编译
1. 什么是交叉编译?
定义
定义:在一种架构的机器上编译生成另一种架构的可执行文件。
应用场景
应用场景:
- 开发嵌入式系统(如 ARM 设备)。
- 为不同平台构建软件(如 x86 主机为 ARM 设备编译程序)。
2. 交叉编译工具链
命名规则:架构-系统-编译器,例如:
arm-linux-gnueabi-gcc:ARM 架构,Linux 系统,GCC 编译器。
riscv64-unknown-elf-gcc:RISC-V 架构,嵌入式系统,GCC 编译器。
3. 交叉编译步骤
(1) 安装工具链
Debian/Ubuntu:
sudo apt install gcc-arm-linux-gnueabi gcc-aarch64-linux-gnu
sudo apt install gcc-mips-linux-gnu gcc-riscv64-linux-gnu
CentOS/RHEL:
sudo yum install gcc-arm-linux-gnu gcc-aarch64-linux-gnu
sudo yum install gcc-mips-linux-gnu gcc-riscv64-linux-gnu
(2) 编写代码
// hello.c
#include <stdio.h>int main() {printf("Hello, Cross-Compilation!\n");return 0;
}
(3) 交叉编译
ARM 32 位:
arm-linux-gnueabi-gcc -o hello_arm hello.c
ARM 64 位:
aarch64-linux-gnu-gcc -o hello_arm64 hello.c
MIPS 32 位:
mips-linux-gnu-gcc -o hello_mips hello.c
RISC-V 64 位:
riscv64-unknown-linux-gnu-gcc -o hello_riscv hello.c
(4) 验证可执行文件
file hello_arm
#输出示例:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked...
4. 运行交叉编译的程序
模拟器:使用 QEMU 模拟目标架构运行程序。
sudo apt install qemu-user
qemu-arm ./hello_arm
qemu-aarch64 ./hello_arm64
qemu-mips ./hello_mips
qemu-riscv64 ./hello_riscv
目标设备:将可执行文件传输到目标设备运行。
三、总结
架构 指令集 位宽 编译工具 交叉编译工具链
x86/x86_64 CISC 32/64 位 GCC、Clang 无需交叉编译
ARM RISC 32/64 位 GCC、Clang arm-linux-gnueabi-gcc 等
MIPS RISC 32/64 位 GCC、Clang mips-linux-gnu-gcc 等
RISC-V RISC 32/64 位 GCC、Clang riscv64-unknown-elf-gcc 等
相关文章:
上位机知识篇---四种CPU架构交叉编译
文章目录 前言一、四种 CPU 架构1. x86/x86_64指令集位宽:应用场景编译工具 2. ARM指令集位宽:应用场景编译工具 3. MIPS指令集位宽应用场景编译工具 4. RISC-V指令集位宽应用场景编译工具 二、交叉编译1. 什么是交叉编译?定义应用场景 2. 交…...
隐式转换为什么导致索引失效
SELECT * FROM users WHERE id 123;这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什…...
【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
项目介绍 本课程演示的是一款基于过滤协同算法的旅游推荐管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…...
SpringBoot @Value 注解使用
Value 注解用于将配置文件中的属性值注入到Spring管理的Bean中。 1. 基本用法 Value 可以直接注入配置文件中的属性值。 配置文件 (application.properties 或 application.yml) 配置文件定义需要注入的数据。 consumer:username: lisiage: 23hobby: sing,read,sleepsubje…...
Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言安装JDK 17创建Spring Boot 项目 方式1:网页在线生成方式2&#…...
高频 SQL 50 题(基础版)_1667. 修复表中的名字
高频 SQL 50 题(基础版)_1667. 修复表中的名字 select user_id ,concat(upper(substring(name,1,1)),lower(substring(name,2))) as name from Users order by user_id...
Windwos10 系统没有微软商店(Microsoft Store)怎么办?
操作方法 管理员身份打开power shell , 输入 Get-AppxPackage -AllUsers Microsoft.WindowsStore* | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register “ ( ( (_.InstallLocation)\AppXManifest.xml”} 按下enter按键,就OK了...
c++同步机制
总结 多线程访问共享数据时需要加锁 多线程数据竞争 假如有一个变量shared_variable被10个线程共享,每个线程在循环中对shared_variable进行 1000 次累加操作,我们期望最终值为10000。 #include <iostream> #include <thread> #include …...
RuoYi框架介绍,以及如何基于Python使用RuoYi框架
若依框架(RuoYi)是一款基于Spring Boot和Vue.js的开源快速开发平台,广泛应用于企业级应用开发。它提供了丰富的功能模块和代码生成工具,帮助开发者快速搭建后台管理系统。 主要特点 前后端分离:前端采用Vue.js&#x…...
Go 语言环境安装
1.go官网下载安装包 All releases - The Go Programming Language 双击安装,一路下一步 2.安装完后查看版本 打开cmd 输入 以下 ,查看语言版本 go version 查看环境变量是否自动设置成功...
vector 面试点总结
ps:部分内容使用“AI”查询 一、入门 1、什么是vector 动态数组容器,支持自动扩容、随机访问和连续内存存储。 2、怎么创建-初始化vector std::vector<int> v; // 创建空vectorstd::vector<int> v {1, 2, 3}; // 直接初始化std::vec…...
Java 8 新特性
Java 8 引入了一系列重要的新特性,极大地增强了 Java 语言的功能,尤其是在 函数式编程、流处理、日期时间 API 和 默认方法 等方面。这些新特性不仅提升了代码的可读性和简洁性,还改善了并发处理的性能。以下是 Java 8 主要新特性的详细说明。…...
知识库技术选型:主流Embedding模型特性对比
知识库技术选型:主流Embedding模型特性对比 1. 知识库与大模型结合的背景 知识库是存储和管理结构化知识的系统,广泛应用于问答系统、推荐系统和搜索引擎等领域。随着大语言模型(LLM)的发展,知识库与大模型的结合成为…...
CAN总线通信协议学习2——数据链路层之帧格式
1 帧格式 帧格式可理解为定义了传输的数据(叫报文)应该“长什么样”来传输,也为后续设定一些规则如错误检查机制提供了思路。 首先,帧格式可分为以下5种类型: PS:CAN总线任意一个设备可当收也可当发&#…...
基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局高阶应用
文字目录 前言第一章、生态安全评价理论及方法介绍一、生态安全评价简介二、生态服务能力简介三、生态安全格局构建研究方法简介 第二章、平台基础一、ArcGIS Pro介绍二、Python环境配置 第三章、数据获取与清洗一、数据获取:二、数据预处理(ArcGIS Pro及…...
神经网络在电力电子与电机控制中的应用
神经网络(Neural Networks)简介 神经网络是一种受生物神经元启发的机器学习模型,能够通过大量数据学习输入与输出之间的非线性映射关系。其核心结构包括: 输入层:接收外部数据(如传感器信号、控制指令&…...
llama-factory || AutoDL平台
报错如下: rootautodl-container-d83e478b47-3def8c49:~/LLaMA-Factory# llamafactory-cli webui * Running on local URL: http://0.0.0.0:7860Could not create share link. Missing file: /root/miniconda3/lib/python3.10/site-packages/gradio/frpc_linux_am…...
数学建模:MATLAB极限学习机解决回归问题
一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法,由输入层、隐藏层、输出层组成。 基本原理: 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值,这些参数在整个…...
力扣785. 判断二分图
力扣785. 判断二分图 题目 题目解析及思路 题目要求将所有节点分成两部分,每条边的两个端点都必须在不同集合中 二分图:BFS/DFS/并查集 因为图不一定联通,所以枚举所有点都做bfs(如果没联通的话) 代码 class Solution { public:bool is…...
【硬件工程师成长】之是否需要组合电容进行滤波的考虑
在电子电路设计中,判断是否需要使用组合电容进行滤波,需综合考虑以下因素: 1. 噪声频谱分析 高频与低频噪声共存:若电源或信号中同时存在低频(如工频纹波)和高频噪声(如开关电源的开关噪声、数字…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
