![](/img/trans.png)
[英]What is difference between .hi .p_hi and .dyn_hi files generated by GHC
[英]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.