首页 > 其他分享 >关于编译器(转)

关于编译器(转)

时间:2023-07-01 18:55:49浏览次数:33  
标签:GCC LLVM C++ Clang 编译器 关于 支持

原文:https://blog.csdn.net/wuhenyouyuyouyu/article/details/104669179/

 

全部的语言编译器都拥有共通的中介架构:
1. 一个前端,用于解析匹配此语言的源代码,这个前端会产生一个抽象语法树;
2. 将此语法树翻译成为 GCC的 寄存器传递语言(register transfer language) 的 后端。
编译器最优化与静态代码解析技术在此阶段应用于代码上。最后,适用于此硬件架构的汇编语言代码以杰克·戴维森与克里斯·弗雷泽发明的算法产出。

几乎全部的GCC都由C/C++写成,除了Ada前端大部分以Ada写成。

 

GCC:GCC的外部接口长得像一个标准的Unix编译器。用户在命令行下键入gcc之程序名,以及一些命令参数,以便决定每个输入文件使用的个别语言编译器,并为输出代码使用适合此硬件平台的汇编语言编译器,并且选择性地运行连接器以制造可执行的程序。

GCC通常是跨平台软件的编译器首选。有别于一般局限于特定系统与运行环境的编译器,GCC在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。

GCC支持的主要处理器架构:ARM、x86、x86-64、MIPS、PowerPC等。

 

Clang:是一个C、C++、Objective-C和Objective-C++编程语言的编译器。它采用了底层虚拟机(LLVM)作为其后端。
它的目标是提供一个GNU编译器套装(GCC)的替代品。

Clang项目包括Clang前端和Clang静态分析器等。这个软件项目在2005年由苹果电脑发起,是LLVM(Low Level Virtual Machine)编译器工具集的前端(front-end),目的是输出代码对应的抽象语法树(Abstract Syntax Tree, AST),并将代码编译成LLVM Bitcode。接着在后端(back-end)使用LLVM编译成平台相关的机器语言。

 

GCC与Clang区别

GCC特性:除支持C/C++/ Objective-C/Objective-C++语言外,还是支持Java/Ada/Fortran/Go等;当前的Clang的C++支持落后于GCC;支持更多平台;更流行,广泛使用,支持完备。

Clang特性:编译速度快;内存占用小;兼容GCC;设计清晰简单、容易理解,易于扩展增强;基于库的模块化设计,易于IDE集成;出错提示更友好。

Clang采用的license是BSD,而GCC是GPLv3。

GCC相比Clang:

  • GCC支持clang不支持的语言,如Java、Ada、FORTRAN、Go等。

  • GCC比LLVM支持更多的“目标”。

  • GCC支持许多语言扩展,其中有些Clang不能实现。

标签:GCC,LLVM,C++,Clang,编译器,关于,支持
From: https://www.cnblogs.com/tan-wm/p/17519723.html

相关文章

  • 关于 SAP UI5 应用附件上传的病毒扫描功能 virus scan profile
    SAPUI5是基于HTML5和JavaScript的SAP的前端开发框架,用于构建企业级应用程序。它提供了丰富的用户界面控件,以及可重用、可扩展和可定制的组件。在企业应用场景中,附件上传和下载是非常常见的需求,SAPUI5提供了丰富的UI控件库以满足各种应用需求。在实现附件上传功能时,主......
  • 关于 SAP UI5 的 CrossApplicationNavigation 服务
    从SAPUI5应用启动时观察Chrome开发者工具console面板,看到如下提示的错误消息:sap.ui.comp.navpopover.SemanticObjectController:Service'CrossApplicationNavigation'couldnotbeobtained-SAPUI5CrossApplicationNavigation是一种用于在SAPFioriLaunchpad......
  • 一周课程学习总结1【关于Linux和c语言程序设计】
    前言这周是我正式开始学习嵌入式的第一周,首先学习了c语言环境的安装,简单的了解了Linux,然后学习了c语言程序设计的部分内容。下面是对这周学习内容的一些总结和我的个人理解,如有不对之处还请指出。LinuxLinux优点:1)开放性;2)完全免费;3)多用户;4)多任务;5)良好的用户界面;6)设备独立......
  • 关于Linux-Kernel-Live-patching-的效果演示-kpatch auto-配置
    本文为了演示出效果,准备了如下的环境操作系统:RedHatEnterpriseLinuxrelease8.7(Ootpa)内核版本:4.18.0-372.9.1.el8.x86_64 1、关于操作系统版本、内核、内核相关的软件包版本,情况如下:[root@qq-5201351~]#cat/etc/redhat-releaseRedHatEnterpriseLinuxrelease......
  • 关于lvm磁盘管理-单个磁盘分区PV的扩容
    在lvm磁盘管理中,vg由一个或者多个pv组成,到最后的系统分区则是由vg中创建出来的lv如果vg的空间不够了、我们可以有两种方式进行扩展-扩容,1、增加新的pv2、扩展-扩容现在有的PV今天笔者主要讲解一下,关于现有PV的扩容过程,PV可以由整块磁盘形成,也可以是单个分区对于整块磁盘的操......
  • 关于href、src、rel和url~
    关于href、src、rel和url~ 辨析href(hypertextreference超文本引用):指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。属性值:片段标识符、javascript代码段、相对或绝对路径。##id属性值javascript:;相对路径网址<linkhref="inde......
  • 关于Linux内核-live-patching-更新内核补丁模块
    由于内核补丁模块是通过RPM软件包交付和应用,更新累积内核补丁模块就如同更新任何其他RPM软件包一样。先决条件:系统已订阅实时补丁流,如将当前安装的内核订阅到实时补丁流中所述。流程如下:更新至当前内核的新累计版本:#yumupdate"kpatch-patch=$(uname-r)"以上命令......
  • 关于内核实时补丁如何工作-How kernel live patching works
    kpatch内核补丁解决方案使用livepatch内核子系统将旧功能重定向到新功能,详细的过程及说明如下:The kpatch kernelpatchingsolutionusesthe livepatch kernelsubsystemtoredirectoldfunctionstonewones.Whenalivekernelpatchisappliedtoasystem,the......
  • 关于Linux系统-内核-live-patching-的介绍
    关于Linux,我们可以使用RedHatEnterpriseLinux内核实时修补解决方案在不重启或者重启任何进程的情况下对运行的内核进行补丁先看一下官网的一段关于Applyingpatcheswithkernellivepatching的介绍:YoucanusetheRedHatEnterpriseLinuxkernellivepatchingsol......
  • 2023.6.30//关于java链接SQLserver数据库报错:驱动程序无法通过使用安全套接字层(SSL)
    详情如下:驱动程序无法通过使用安全套接字层(SSL)加密与SQLServer建立安全连接。错误:“PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderException:unabletofindvalidcertificationpathtorequestedtarget”。ClientConnectionId:32d1......