2013-01-03 130 views
1

我正在使用不同的編譯器CC。它不像GCC那樣工作。LIS,OBJ和EXE文件之間有什麼關係?

當我使用GCC時,我可以執行「gcc -o exe_filename source_filename」,輸出將是一個exe文件。

當我使用CC時,我需要2個步驟。首先,我編譯源文件(假設它涉及.c和.h文件)並創建.lis文件和.obj文件。然後我做了一個鏈接命令,它創建了一個.exe文件。

LIS,OBJ和EXE文件之間的關係是什麼?我問這是因爲我想知道哪些文件需要,如果我想在另一臺機器上使用exe而不包含不必要的文件。如果LIS和OBJ僅用於編譯,我不需要它在另一臺機器上。

+1

這實際上與編譯器無關。 GCC也通過[通常編譯C代碼的步驟](http://www.tenouk.com/ModuleW.html)。 – 2013-01-03 07:32:51

回答

7

編譯器採用C文件(包括.h文件作爲參考),併產生物體(OBJ)和上市(LIS)文件。目標文件包含代碼和數據,但具有未解析的外部引用。列表通常包含行號,錯誤和警告消息以及可選部分,如類型和變量交叉引用。

鏈接器結合了目標文件並解析了對庫的外部引用。結果是一個可執行(EXE)圖像。 (或創建庫時可共享的圖像)。

只有可執行文件需要從一個系統複製到另一個系統才能運行應用程序。列表可能對解釋錯誤消息很有用,因爲它提供了正確相關的行號。如果應用程序需要由於庫中的更改而重新鏈接,那麼該對象可能很有用,特別是如果目標系統的版本比原始系統舊。

3

OBJ文件是一種格式的編譯C文件,它們可以通過鏈接器「鏈接」在一起並轉換爲EXE。

編譯 - > OBJ - >連接 - > EXE

的LIS文件是編譯器最終編譯的C只是信息輸出。

所有你需要編譯和鏈接的是EXE

0

你不需要其他文件。該exe文件本身會很好地工作。

-1

我對LIS沒有太多的想法。但OBJ和EXE之間的區別是OBJ文件可能包含未解析的符號,而在EXE文件中,所有符號都被鏈接和解析。

如果另一臺機器也具有相同的硬件,然後ü可以使用直接exe文件到別的,你需要將運行編譯

+0

我懷疑'lis'文件只是符號列表(與調試相關的信息)。 – 2013-01-03 07:42:23

相關問題