繁体   English   中英

GHC(在Linux上)生成的.hi和.o文件是什么?

[英]What are the .hi and .o files generated by GHC (on Linux)?

我刚刚开始使用Haskell和函数式编程。 在编译并运行我的第一个Haskell程序之后,我注意到GHC(在Linux上)从单个.hs源文件生成三个单独的文件:.hi文件,.o文件,最后是可执行文件。 每个文件的目的是什么? 实际上,什么时候实际使用.hi和.o文件?

根据我在C方面的经验,我认为.o是一个目标文件。 搜索Google显示.hi是一个“界面文件”。

.o与C的目标文件完全相同; .hi文件是一个“接口文件”; 它包含GHC需要的.o信息,如果您编译其他模块,则能够链接该.o文件(所述信息不能存储在标准的.o文件中)。

你可以说.hi文件相当于C的头文件(即扩展名为.h),只有GHC从原来的Haskell源生成。

因此,当GHC编译其他模块时使用.hi,并且在将所有模块链接在一起以产生可执行文件时使用.o。

成功生成可执行文件后,您可以安全地删除.hi和.o文件(如果您想进行一些小的更改并快速重建,则可以保留它们 - 这将节省不必要的重新编译时间)。

.o文件确实是目标文件。 基本上字节码块准备链接在一起。

.hi文件是接口文件。 简短的版本是它们包含类似编译类型签名的信息以及允许GHC跨文件边界执行优化的信息。


我个人觉得在我的工作目录中有这些文件很烦人,我把-outputdir ../tmp添加到我的ghc调用中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM