首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么clang选一个gcc装置?

问为什么clang选一个gcc装置?
EN

Stack Overflow用户
提问于 2014-06-22 07:38:16
回答 1查看 6.1K关注 0票数 21

命令"clang -v“打印:

代码语言:javascript
复制
$ clang -v
clang version 3.4 (tags/RELEASE_34/final)
Target: i386-redhat-linux-gnu
Thread model: posix
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2
Found candidate GCC installation: /usr/lib/gcc/i686-redhat-linux/4.8.2
Selected GCC installation: /usr/bin/../lib/gcc/i686-redhat-linux/4.8.2

“嘎嘎选gcc安装”是什么意思?为什么?Clang是否独立于gcc?

谢谢你的帮助。

编辑:

我在页面上找到了一个大概一般的答案(我使用Fedora 20)。

https://bbs.archlinux.org/viewtopic.php?id=129760

EN

回答 1

Stack Overflow用户

发布于 2016-07-10 12:07:36

Clang使用主机编译器中的几个设置,如果这个主机上还有其他默认编译器(在苹果的OSX/macOS和FreeBSD变体上是默认的)。与操作系统的其他二进制文件和库实现更好的兼容性是非常有用的。

它通常使用主机二进制(用于链接器和汇编程序)、主机编译器(用于crt文件和内部编译器头)和c++库(用于C++程序/库中的ABI兼容性)。

工具链选择是clang驱动程序( clang命令)的一部分,在https://github.com/llvm-mirror/clang/blob/master/lib/Driver/ToolChains.cpp文件中实现。

在Clang的“驱动程序设计和内部组件”http://clang.llvm.org/docs/DriverInternals.html中有一些文档

工具链 gcc的司机对工具链没有直接的理解。每个gcc二进制文件大致对应于嵌入在单个ToolChain中的信息。 clang驱动程序可以移植并支持复杂的编译环境。所有平台和工具链特定的代码都应该保护在抽象接口或定义良好的接口后面(例如平台是否支持用作驱动程序驱动程序)。 绑定:工具&文件名选择。从概念上讲,驱动程序执行自顶向下的匹配以将Action分配给工具。ToolChain负责选择执行特定操作的工具;一旦选择,驱动程序将与该工具交互,以查看它是否能够匹配其他操作(例如,通过一个集成的预处理程序)。 驱动程序与ToolChain交互以执行工具绑定。每个ToolChain包含有关为特定体系结构、平台和操作系统编译所需的所有工具的信息。单个驱动程序调用可以在一次编译期间查询多个ToolChains,以便与用于不同体系结构的工具进行交互。 这个阶段的结果不是直接计算的,但是驱动程序可以通过-ccc打印绑定选项打印结果。例如: $ clang -ccc-打印- -arch i386 -arch ppc t0.c #“i 386-apple-darwin 9”- "clang",输入:"t0.c",输出:“/tmp/cc-sn4RKF.”#“i 386-apple-darwin9”-“达尔文::组装”,输入:"/tmp/cc-Sn4RKF.s",输出:"/tmp/cc-gvSnbS.o“#”i 386-apple-darwin 9“-”达尔文:链接“,输入:"/tmp/cc-gvSnbS.o",输出:"/tmp/cc-jgHQxi.out“#”ppc-apple-darwin9 9“--”gcc:编译“,输入:"t0.c",输出:"/tmp/cc-Q0bTox.s”# "ppc-apple-darwin9“-”gcc::组合“,输入:"/tmp/cc-Q0bTox.s",输出:"/tmp/cc-WCdicw.o“#”ppc-apple-darwin 9“- "gcc::Link",输入:"/tmp/cc-WCdicw.o",输出:”/tmp/cc-hbbbh.out“#”i 386-apple-darwin9“- "darwin::Lipo",输入:"/tmp/cc-jgHQxi.out",”/tmp/cc-hbbh.out“,输出:"a.out”。 这显示了与此编译序列绑定的工具链、工具、输入和输出。这里,clang用于在i386体系结构上编译t0.c,而达尔文特定版本的工具用于组装和链接结果,但通用gcc版本的工具正在PowerPC上使用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24349124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档