gpt4 book ai didi

linker - 用法之间的差异。 a.out,.ELF,.EXE和.COFF

转载 作者:行者123 更新时间:2023-12-03 22:27:21 25 4
gpt4 key购买 nike

通过查看问题标题不要误会我-我知道它们是什么(便携式可执行文件的格式)。但是我的兴趣范围略有不同

我的CONFUSION

我参与了重新托管/重新定向最初来自第三方的应用程序。问题在于,有时目标代码的格式也为.elf,.COFF格式,并且仍然显示为“可执行和可链接”。

我主要是Windows用户,并且知道在编译和汇编C / C++代码时,您会看到类似于.o或.obj的内容。不能执行的代码(嗯,我从未尝试执行它们)。但是,当您完成静态和动态库的链接并完成构建后,可执行文件就会出现。我的理解是,如果有必要,您可以接着链接可执行文件或使用某种形式的脚本“bash”对其进行测试。

但是,在Linux(或类似UNIX的系统)中,编译和汇编C / C++代码后会有.o文件。链接完成后,可执行文件将采用a.out格式(至少在Linux的Ubuntu发行版中)。在其他发行版中,它很可能是.elf。在我的快速网络搜索中,没有任何资料提及.o文件作为可执行文件。

问题

因此,我的问题变成以下几点:

  • 可移植可执行文件和目标代码的真正定义是什么?
  • Windows和UNIX平台如何覆盖同一文件格式(.COFF,.elf)下的两个可执行文件和目标代码。
  • 我误解了“可链接”吗?我对“可链接”的解释是经过编译的目标代码,然后可以“链接”到其他静态/动态链接库。这是一个愚蠢的想法吗?
  • 基于问题1(也许是2),我是否需要将符号表(例如.LUM或.MAP文件)与目标代码一起使用?与调试符号相同的符号,并在其他计算机上重新托管可执行文件/目标文件时使用它们。

  • 在此先感谢您的正确建议。同时,如有必要,我将继续挖掘并更新问题。

    更新

    我设法从某处挖出 this :(似乎很多东西要吞噬我。

    最佳答案

    I am primarily a Windows user and know that when you compile your C/C++ code, you get something similar to .o or .obj. that are not executable



    好吧,我上次在Windows上编译东西时,编译 的结果是一个 .obj文件,这正是它的名称所暗示的:这是一个 object file。您说对了,因为它本身不是可执行文件。它包含的机器代码尚未包含足够的信息以直接在CPU上运行。

    However, in Linux (or UNIX-like systems) there are .o files after you compile the C/C++ code. And once the linking is done, the executable is in a.out format (at least in Ubuntu distribution of Linux). It may very well be .elf in some other distrib.



    生活在90年代,即:P没有现代编译器,我知道将 a.out格式作为目标代码的默认输出格式。如果未指定显式输出文件名,将目标代码放入名为 a.out的文件中可能是误导性的GCC默认设置,但是如果在 file上运行 a.out命令,您会发现它是一个ELF文件。 a.out格式很古老,有点“事实上已经过时”。

    What is the true definitions for portable executables and object code?



    您已经获得了指向目标文件 here's the one to "Portable Executable"的Wikipedia链接。

    How is it that Windows and UNIX platform covers both executables annd object code under the same file format (.COFF, .elf).



    因为ELF格式(显然还有COFF)的设计也是如此。那么为何不?毕竟这只是完全相同的机器代码,在所有编译步骤中使用一种文件格式似乎很合逻辑。就像我们不喜欢动态库和独立可执行文件具有不同格式时一样。 (这就是为什么ELF被称为ELF的原因-它是“可执行 可链接格式”。)

    Am I misinterpreting "Linkable"?



    我不知道。从您的问题来看,我不清楚您认为“可链接”是什么。通常,这意味着它是一个可以链接的文件,即。 e。图书馆。

    Based on question 1. (and perhaps 2) do I need to use symbol tables (e.g. .LUM or .MAP files) with object code then? Symbols as in debug symbols and using them when re-hosting the object files on a different machine.



    我认为这与所使用的可执行格式无关。如果要调试,无论如何都必须生成调试信息。但是,如果您不需要调试,则可以随意省略它们。

    关于linker - 用法之间的差异。 a.out,.ELF,.EXE和.COFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17336239/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com