重新认识交叉编译

1. 我以前对交叉编译的认知

引用正点原子的话来讲就是:

说得对,但是不全面,直到最近项目中遇到了一个例子我才重新认识什么是交叉编译。

2. build/host/target的概念

参考: Cross-Compilation (automake)

参考: Specifying Target Triplets (Autoconf)

所以这里理解交叉编译与交叉编译器很重要:

先说交叉编译: 这里只需要build和host,build代表可执行程序的编译环境,host代表编译出来的可执行程序的执行环境,只要build和host不同,就叫交叉编译。

再说交叉编译器: 编译器首先也是一个执行程序,它也要被编译出来,它有自己的build环境(编译器在哪里被编译的),它有自己的运行host环境(编译器在什么环境运行),那么这里编译编译器本身可能是一个交叉编译行为(cross-compile,build != host),也可能不是一个交叉编译行为(native-compile,build == host); 另外,编译器本身可以编译程序,由编译器编译出来的程序的运行环境由target来指定,这里有可能build、host、target三者都相等,也有可能三者都不相等,也有可能build和host相等且与target不相等。

所以这里总结一下,如果是编译器本身,看它的build和host是否相同,来判定该编译器是否被交叉编译;如果是可执行程序,看该可执行程序的build和host是否相同,来判定该可执行程序是否被交叉编译,同时也可以看编译该可执行程序的编译器的host与target是否相同来判定该可执行程序是否被交叉编译。

3. 编译链的种类

上面小节说到,对于编译器,它的build、host、target情况可能不同,对此分了如下类别:

参考: Toolchains - eLinux.org

  • native toolchain
  • cross-compilation toolchain
  • cross-native toolchain
  • canadian toolchain

4. 趣事: canadian toolchain和加拿大有啥关系?

参考: https://en.wikipedia.org/wiki/Cross_compiler#Canadian_Cross

参考: 什么是native compiler?什么是cross compiler? | 懒惰的程序员

好吧,奇奇怪怪的知识又增加了。

5. 一些编译器的例子

X86 native toolchain:

X86 cross-compile toolchain:

ARM native toolchain:

ARM64 native toolchain:

ARM64 cross-compile toolchain:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109784.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode:70. 爬楼梯

一、题目 函数原型:int climbStairs(int n) 二、思路 此题运用递归思想。当只有1个台阶,那么只有1种方法爬到楼顶——跨一个台阶;当有2个台阶时,有2种方法爬到楼顶——跨一个台阶跨两次或直接跨两个台阶。当有3个台阶或更多台阶时…

每日刷题-6

目录 一、选择题 二、算法题 1.Fibonacci数列 2.合法括号序列判断 一、选择题 1、 解析:内联函数是一种可以提高函数执行效率的方法,它的原理是编译时在函数调用点直接展开函数体的代码,从而避免了函数调用的开销。 但是,内联函…

华为云云耀云服务器L实例评测|华为云云耀云服务器L实例开展性能评测

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

Pico-I / O嵌入式模块提供48点数字I / O接口

WinSystems的PCO-UIO48-G是具有中断事件检测功能的48点数字I / O接口。Pico-I / O嵌入式模块旨在为Pico-ITXe单板计算机提供低成本的I / O扩展。该产品的主要功能之一是,它可以监视24个上升和下降的数字边沿转换,将其锁存,然后向主机处理器发…

智囊AI-基于 ChatGPT 的 AI 工具产品 你的私人AI助手

智囊AI是一款基于 ChatGPT 的 AI 工具产品,主打免费、智能、方便,可以在此雇佣各种各样的免费智囊进行对话、自己创造和分享智囊、共享有趣有用的对话等。不过使用需要注册登录,可以使用自己的openai key或者使用网站提供的api key&#xff0…

扩散模型在图像生成中的应用:从真实样例到逼真图像的奇妙转变

一、扩散模型 扩散模型的起源可以追溯到热力学中的扩散过程。热力学中的扩散过程是指物质从高浓度往低浓度的地方流动,最终达到一种动态的平衡。这个过程就是一个扩散过程。 在深度学习领域中,扩散模型(diffusion models)是深度生…

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作已收录至成都

启动微服务,提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

说明:启动一些微服务后,一直在报下面这个错误; com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not acc…

Postman应用——初步了解postman

Postman 是一个用于构建和使用 API 的 API 平台,Postman 简化了 API 生命周期的每个步骤并简化了协作,可以更快地创建更好的 API。 Postman 包含一个基于Node.js的强大的运行时,允许您向请求(request)和分组&#xff…

【计算机网络】Tcp详解

文章目录 前言Tcp协议段格式TCP的可靠性面向字节流应答机制超时重传流量控制滑动窗口(重要)拥塞控制延迟应答捎带应答标志位具体标志位三次握手四次挥手粘包问题TCP异常情况listen的第二个参数 前言 前面我们学习了传输层协议Udp,今天我们一…

uniapp H5生成画布,插入网络图片。下载画布

因为网络图片不能直接使用ctx.drawImage()插入。得使用uni.getImageInfo()方法下载后插入。 但是当画布中存在多张网络图片时,必须等待uni.getImageInfo()下载完成后才行。这样得下载套下载。太过于繁琐。所以定义了一个递归下载方法。同时避免下载图片异…

如何应对数字时代的网络安全新挑战?

随着数字时代的来临,我们迎来了无限的机遇,同时也伴随着网络安全领域新的挑战。网络攻击变得更加智能化和复杂化,威胁也在不断演化。为了应对这些新挑战,我们必须采取创新的网络安全策略和技术。本文将探讨数字时代网络安全的新挑…