首页 > 解决方案 > GHC(在 Linux 上)生成的 .hi 和 .o 文件是什么?

问题描述

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

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

标签: haskellghc

解决方案


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

您可以说该.hi文件相当于 C 的头文件(即带有.h扩展名),只有这些是 GHC 从原始 Haskell 源代码生成的。

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

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


推荐阅读