簡體   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