当前位置: 首页 > article >正文

GCC和clang的爱恨情仇

到底什么是clang?

clang代表"a C language family frontend for LLVM", 最早是Apple发起,源于不满GCC不能更友好修改ObjC的需求,Apple另起炉灶。因为ObjC在苹果有足够高的地位,clang一开始支持的语言就包含C/C++/ObjC. clang是编译器前端,意味着它要搭配后端,LLVM就是官方标配的后端。Android平台也逐渐从GCC转向clang.

为什么在macOS下发现gcc和clang经常代表一个东西?

这是苹果的智慧,也是软链接的功效。苹果之前是用开源社区的GCC编译器,后来恼了,另起炉灶做了clang+LLVM, 注意准确的说GCC作用等同于clang + LLVM. 但为了兼容,也为了让喜欢用GCC的程序员遇到找不到GCC的问题,就偷偷将GCC软链接到clang. 可以用man gcc/clang或者ls -l命令来获取它们的真身。

Xcode和GCC/clang的爱恨情仇

Xcode4之前,苹果一直在用GCC作为编译器,至少前端在用。Xcode 4.2开始,替换GCC改成clang做前端 + LLVM, 依然保留GCC可选. 从Xcode 5开始,苹果移除了GCC,完全用clang + LLVM. 这里有趣的地方就在于Xcode 5之前,苹果保留了llvm-gcc作为前端编译器,本质是GCC.









C++ Language Support - Xcode - Apple Developer










 


若文章对您有帮助,欢迎关注。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.kler.cn/a/385422.html

相关文章:

  • libuv的调用例子
  • Android Audio中 AudioTrack、 AudioFlinger和 HAL 使用dump的区别
  • 右旋圆极化散射后的stocks矢量 与T3矩阵的关系
  • 如何为 Redis 设置密码
  • Eslint 和 Prettier
  • 在vscode中开发运行uni-app项目
  • 【Linux系统】—— 基本指令(二)
  • SpringBoot实现的企业资产管理系统
  • 纯C++信号槽使用Demo (sigslot 库使用)
  • PyQt入门指南四十六 性能优化策略
  • AntPathMatcher 技术文档
  • Affinity part 2 - 系统拓扑结构和控制亲和性
  • 气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
  • 支付宝与华为终端联手,移动支付即将进入“碰时代”
  • 掌握springboot过滤器,拦截器 ,aop
  • 宠物空气净化器哪家好?希喂、安德迈、霍尼韦尔除毛能力测评
  • 量化交易系统开发-实时行情自动化交易-数据的种类
  • 深入理解Java中的接口
  • C#中的可空类型是什么?
  • 渗透测试---Linux基础(二)(完结版)
  • 【芯智雲城】RICHTEK立锜科技23V降压转换器
  • QinQ VLAN技术
  • 速盾:怎么使用cdn加速?
  • qt for android 控制系统的不同音量
  • Python 微服务架构
  • 【git】使用记录