为什么c ++可执行文件平台依赖?

时间:2018-03-22 10:50:13

标签: c++ compilation operating-system cross-platform

我一直在寻找一个跨平台的软件,通过查看编译的C ++文件(即静态或动态库或应用程序)是如何依赖于平台的,我想知道是什么让二进制平台依赖。

我知道处理器的指令集和使用特定于操作系统的c ++函数会使二进制/代码平台依赖。

但是我们假设我有2台x86机器,一台运行linux,另一台运行Windows和C ++代码。该代码不使用任何特定于平台的功能。为什么我的可执行文件依赖于操作?

如果它仅适用于应用程序文件中的特定于操作系统的标头,则会有转换工具elf< - > exe,但事实并非如此。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

  1. 可执行文件包含一条指令流,指示加载程序如何将程序放入内存。不同操作系统使用的可执行文件有不同的格式,可反映操作系统的不同功能。

  2. 如您所述,处理器有不同的指令集。

  3. 可执行文件加载可能特定于一个操作系统的库。

  4. 您的可执行文件可能包含调用系统服务的存根代码。通过触发异常处理程序来调用系统服务。操作系统中异常的处理会有所不同。

  5. 操作系统对功能有不同的调用转换。如果您在不同的系统上调用相同的功能,则可能需要以不同的方式调用它。

  6. 即使结构的名称相同,库调用使用的结构的实现也会有所不同。

  7. 功能的命名可以不同。某些操作系统前缀上的链接器,例如,全局和通用符号名称的下划线。许多人没有。

  8. 我会停在那里,但我相信其他人可能会提出更多理由。