haskell - GHC(在 Linux 上)生成的 .hi 和 .o 文件是什么?
问题描述
我刚开始使用 Haskell 和一般的函数式编程。在编译并运行我的第一个 Haskell 程序后,我注意到 GHC(在 Linux 上)从一个 .hs 源文件生成三个单独的文件:一个 .hi 文件、一个 .o 文件,最后是一个可执行文件。每个文件的目的是什么?实际上,.hi 和 .o 文件何时实际使用?
根据我在 C 方面的一点经验,我认为 .o 是一个目标文件。搜索谷歌显示 .hi 是一个“接口文件”。
解决方案
与 C的.o
目标文件完全相同;该.hi
文件是“接口文件”;它包含有关.o
GHC 需要的信息,如果您编译其他模块,以便能够链接到该.o
文件(所述信息不能存储在标准.o
文件中)。
您可以说该.hi
文件相当于 C 的头文件(即带有.h
扩展名),只有这些是 GHC 从原始 Haskell 源代码生成的。
因此,.hi
在 GHC 编译其他模块时.o
使用 ,并且在将所有模块链接在一起以生成可执行文件时使用 。
成功生成可执行文件后,您可以安全地删除.hi
和.o
文件(如果您想进行一些小的更改并快速重建,则可以保留它们 - 这将节省不必要的重新编译时间)。
推荐阅读
- oracle - oracle如何创建队列用户?
- javascript - 音频点击波正弦波
- python - 如何使用 jinja 将不同的索引附加到 html 元素?
- ruby-on-rails - 没有路线匹配 [GET] "/auth/twitter" OmniA
- c# - C# 使用递归从完整 url 中检索父子 url
- ios - 单个颤振应用程序具有多个捆绑 ID 是否可以?
- reactjs - Button 中的三元运算符导致“...”预期 TS(1005) 错误
- c++ - 为什么我的程序的性能会随着线程数的增加而降低?
- node.js - 如何将节点版本切换到安装的较新版本(v14.15.4)
- java - 如何将休眠文件连接到 SQL Server 数据库?