2

我正在使用不同的编译器 CC。它不像 GCC 那样工作。

当我使用 GCC 时,我可以执行“gcc -o exe_filename source_filename”,输出将是一个 exe 文件。

当我使用 CC 时,我需要 2 个步骤。首先我编译源文件(假设它涉及一个 .c 和一个 .h 文件)并创建一个 .lis 文件和一个 .obj 文件。然后我执行一个创建 .exe 文件的链接命令。

LIS、OBJ、EXE文件有什么关系?我问这个是因为我想知道如果我想在另一台机器上使用 exe 而不包含不必要的文件,我需要哪些文件。如果 LIS 和 OBJ 只用于编译,我不需要在另一台机器上使用它。

4

4 回答 4

7

编译器获取 C 文件(并包括引用的 H 文件)并生成对象 (OBJ) 和列表 (LIS) 文件。目标文件包含代码和数据,但具有未解析的外部引用。该列表通常包括行号、错误和警告消息以及可选部分,例如类型和变量交叉引用。

链接器组合目标文件并解析对库的外部引用。结果是一个可执行 (EXE) 映像。(或创建库时可共享的图像。)

只需要将可执行文件从一个系统复制到另一个系统即可运行应用程序。该列表可能有助于解释错误消息,因为它提供了正确相关的行号。如果由于库中的更改而需要重新链接应用程序,尤其是在目标系统的版本比原始系统旧的情况下,该对象可能很有用。

于 2013-01-03T16:47:16.103 回答
3

OBJ 文件是编译后的 C 文件,其格式可以通过链接器“链接”在一起并转换为 EXE。

编译 -> OBJ -> 链接 -> EXE

LIS 文件只是编译器最终编译的 C 的信息输出。

编译和链接后,您只需要 EXE

于 2013-01-03T07:34:29.703 回答
0

您不需要其他文件。该 exe 将自行正常工作。

于 2013-01-03T07:35:52.737 回答
0

我对LIS没有太多想法。但 OBJ 和 EXE 的区别在于 OBJ 文件可能包含未解析的符号,而在 EXE 文件中,所有符号都是链接和解析的。

如果另一台机器也有相同的硬件,那么你可以使用直接 exe 运行,否则你必须交叉编译

于 2013-01-03T07:38:40.967 回答