上位机知识篇---四种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. 噪声频谱分析 高频与低频噪声共存:若电源或信号中同时存在低频(如工频纹波)和高频噪声(如开关电源的开关噪声、数字…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

算法岗面试经验分享-大模型篇
文章目录 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…...