我试图理解LLVM程序的高层结构。 我在书中读到“程序是由模块组成的,每个模块都对应于translation unit”。有人可以更详细地解释我以上内容以及模块和翻译单元(如果有)之间的不同之处。 我也有兴趣知道当翻译单元启动并完成调试信息编码时哪部分代码被调用?LLVM翻译单元
LLVM翻译单元
回答
翻译单位是语言标准术语。例如,这是从C(c99 iso草案)
5.1概念模型; 5.1.1翻译环境; 5.1.1.1程序结构
一个C程序不需要全部同时翻译。该程序的文本以本国际标准中称为源文件(或预处理文件)的单位保存为 。一个 源文件以及所有通过预处理 指令#include包含的标题和源文件被称为预处理转换单元。在预处理之后,预处理翻译单元被称为翻译单元。
于是,翻译单元是预处理后的单源文件(file.c
)(所有#include
d *.h
文件实例化,所有宏被扩展,所有的意见会被跳过,文件准备符号化)。
翻译单元是一个编译单元,因为它在连接步骤之前不依赖任何外部资源。所有标题都在TU内。
术语模块未在语言标准中定义,但它在更深的翻译阶段指的是translation unit
。
LLVM把它描述为:http://llvm.org/docs/ProgrammersManual.html
模块类代表存在于LLVM方案的顶层结构。 LLVM模块实际上是原始程序的翻译单元或由链接程序合并的多个翻译单元的组合。
Module类跟踪函数列表,GlobalVariables列表和SymbolTable。此外,它还包含一些有用的成员函数,可以使常用操作变得简单。
关于你的问题,这部分:
我也有兴趣知道哪部分代码被称为翻译单元开始时并完成调试信息的编码?
这取决于如何使用LLVM。 LLVM本身是一个库,可以以各种方式使用。
对于clang/LLVM(C/C++编译器构建在libclang和LLVM上)预处理阶段后创建的翻译单元。它将被解析成AST,然后解析成LLVM程序集并保存在Module中。
对于教程示例,这里是一个创建模块http://llvm.org/releases/2.6/docs/tutorial/JITTutorial1.html
- 1. 跨C++翻译单元初始化
- 2. C和C++中的翻译单元
- 3. 部首后卫/翻译单元问题
- 4. libclang缓慢地重新编译翻译单元
- 5. 由当前翻译单元编译的对象的名称C
- 6. 翻译一个四元数
- 7. LLVM编译单元的正确抽象是什么?
- 8. CSS3翻译:翻译椭圆路径上的元素
- 9. 直接在单元格中获取单词的翻译
- 10. Django表单错误翻译
- 11. Symfony2表单错误翻译
- 12. Java类翻译菜单
- 13. Zend框架菜单翻译
- 14. 非翻译单引号
- 15. jQuery插件,允许像谷歌翻译下拉菜单翻译
- 16. 如何从java翻译器中获取翻译的单词?
- 17. Joomla翻译文件不会翻译所有单词
- 18. Magento:翻译文件中的单引号无效翻译
- 19. 单声道LLVM和LLVM-IR
- 20. extern关键字和多个翻译单元的使用
- 21. VBA代码单元的数据语言翻译
- 22. 单元测试中的ng2-translate返回键而不是翻译
- 23. 不同翻译单元中的模板实例
- 24. 静态,全局和多个翻译单元
- 25. 字符串跨翻译单元的文字地址
- 26. 获取的代码行的总数在翻译单元
- 27. 如何注释翻译单元包含电子邮件文本?
- 28. 使用Boost.Spirit定义独立翻译单元中的船长X3
- 29. 角度翻译单元测试 - 无法注入$ translateProvider
- 30. 如何翻译Python 3中的MATLAB单元格?
来给你的答案多一点细节:“翻译单位”是从* C *语言标准,在其他编译语言也使用的一个术语。术语“模块”在LLVM中用于大致相同的概念。 –