首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU/Clang工具链中可执行文件的简要说明?

GNU/Clang工具链中可执行文件的简要说明?
EN

Software Engineering用户
提问于 2012-11-08 17:20:53
回答 1查看 508关注 0票数 2

我大致理解cc、ld和其他部分是按照Makefiles等方案按一定顺序调用的,其中一些命令用于生成这些信任和Makefile。还有一些其他工具用于处理库。但是其他的部件是用来做什么的呢?在这个过程中,他们是如何被调用的?哪个工具将使用不同的解析器生成器?哪一部分是可选的?为什么?

对于GNU或LLVM/Clang工具链中的工具是如何在C/C++项目构建中组织和调用的,是否有一个简短的总结?

提前谢谢。

编辑:

以下是Mac上Clang/LLVM的可执行文件列表:

ar gperf libtool rpcgen unwinddump作为clang++侏儒gprof lorder otool cmpdylib dyldinfo缩进m4分页器大小bison codesign_allocate flexinstall_name_tool mig标签flex++ flex++ mkdep rebase unifdef cc ctf_insert gm4 lex nm redo_prebinding unifdefall

EN

回答 1

Software Engineering用户

发布于 2012-11-11 19:11:20

大多数这些工具没有在标准项目中使用--我自己从未见过其中的一半。

就实际运行的进程而言,这是基本的工作流:

代码语言:javascript
复制
gcc
|
v
cc1 -> as -> collect2 -> ld

这本身并没有告诉你那么多。没有cpp (预处理程序)--集成到cc1中。cc1本身就是后端和“真正的”编译器-- gcc二进制文件是执行实际工作的所有工具的前端。cc1是预处理器/编译器后端,它编译成程序集。as是汇编程序,它生成对象文件。collect2 (我自己忘记了这一点,只是因为我运行了一个strace才知道这一点)有助于在可执行文件(来自这里)中安排启动代码。最后,ld将对象文件和库链接到最终的可执行文件中。

对于这些单独组件的实际使用,通常更好的方法是调用gcc并让它知道该做什么。例如,可以在gcc -S文件上运行.c以生成.s辅助文件,也可以运行gcc -E只对源文件进行预处理。

基本上,man gcc就是您想要阅读的内容。或者至少浏览一下。

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

https://softwareengineering.stackexchange.com/questions/175143

复制
相关文章

相似问题

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