【问题标题】:Why are c++ executables platform dependant?为什么 c++ 可执行文件依赖于平台?
【发布时间】:2018-08-31 18:40:18
【问题描述】:

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

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

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

如果只是针对应用程序文件中的操作系统特定头文件,会有转换工具elfexe,但事实并非如此。

我错过了什么?

【问题讨论】:

  • 完全不同的格式,ABI
  • 这是因为可移植可执行文件的架构。
  • 程序二进制文件不仅在不同的操作系统上具有不同的格式(因为加载它们的是操作系统),而且还取决于操作系统的系统功能。
  • 您应该阅读此内容以获得答案:en.wikipedia.org/wiki/Application_binary_interface
  • 出于同样的原因,不同的汽车需要不同的零件。

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


【解决方案1】:
  1. 可执行文件包含指示加载程序如何将程序放入内存的指令流。不同操作系统使用的可执行文件有不同的格式,体现了操作系统的不同能力。

  2. 正如您提到的,处理器具有不同的指令集。

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

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

  5. 操作系统对函数有不同的调用转换。如果你在不同的系统上调用同一个函数,你可能需要以不同的方式调用它。

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

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

我会就此打住,但我相信其他人会想出更多理由。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2015-09-18
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多