码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 重新认识交叉编译


    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:

  • 相关阅读:
    数字图像处理基础
    C#-抽象类与接口
    2024,java开发,已经炸了吗?
    java计算机毕业设计ssm求职与招聘网站的设计与实现
    Qt QTableView排序
    这才叫高并发,阿里架构师手写的三份绝密百亿级架构笔记限时分享
    numpy.where
    matlab新手快速上手5(蚁群算法)
    MySQL【存储过程与函数】
    代码随想录算法训练营第三十九天|62.不同路径, 63. 不同路径 II
  • 原文地址:https://blog.csdn.net/liaojunwu/article/details/132912904
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号