【问题标题】:What are the relationship between LIS, OBJ and EXE files?LIS、OBJ、EXE文件有什么关系?
【发布时间】:2013-01-03 07:29:38
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c openvms


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 我怀疑lis 文件只是符号列表(与调试相关的信息)。
        猜你喜欢
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2019-01-08
        • 2011-06-10
        • 1970-01-01
        相关资源
        最近更新 更多