LIS,OBJ和EXE文件之间有什么关系?

时间:2013-01-03 07:29:39

标签: c openvms

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

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

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

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

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

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

编译和链接后您需要的只是EXE

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

我对LIS不太了解。但是OBJ和EXE之间的区别是OBJ文件可能包含未解析的符号,而在EXE文件中所有符号都被链接和解析。

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