混合架构软件的可取性
Desirability of mixed architecture software
在什么情况下,为不同架构编译的本机代码可以在同一个操作系统上协同工作?究竟什么时候需要这样的混合?
可以说 32 位代码 运行 在主要是 64 位的进程中,还是进程必须是纯的?
我一直在研究 Linux 构建和打包系统。我的构建目标通过架构(例如 x86_64-gnu_linux )和变体(发布、调试等)来区分,对于打包部分,我一直在简化假设下操作,即没有包可以混合架构或取决于为不同目标构建的代码。
这种简化到底让我失去了什么?
假设您拥有所有源代码并且可以为本机目标编译,是否需要一个混合架构包?
在 Linux 中,如果不使用任何 hack,无法在 64 位进程中加载 32 位共享库。反之,不能在 32 位进程中加载 64 位库。换句话说,过程是纯粹的;它们是 32 位或 64 位的。虽然设计一个支持混合进程的 Linux OS 在技术上是可行的,但我认为没有这样的 Linux 发行版。
当需要互操作32位和64位二进制文件时,它们应该运行在不同的进程中,然后它们可以通过一些inter-process通信(IPC)机制进行互操作。
因此,如果您认为它可能在同一个包中有多个主要可执行文件,那么有可能(虽然不常见)具有不同位宽的二进制文件,这些二进制文件旨在通过同一个包中的 IPC 进行交互。但即使在这种情况下,也可能有一个主可执行文件(32 位或 64 位)构成整个应用程序的起点。该可执行文件将负责启动其他 32 位或 64 位进程。包含所有这些可执行文件的包可以仅通过该主要可执行文件的体系结构来描述,而忽略包中任何其他可执行文件的目标体系结构。这样做是合理的。
在什么情况下,为不同架构编译的本机代码可以在同一个操作系统上协同工作?究竟什么时候需要这样的混合?
可以说 32 位代码 运行 在主要是 64 位的进程中,还是进程必须是纯的?
我一直在研究 Linux 构建和打包系统。我的构建目标通过架构(例如 x86_64-gnu_linux )和变体(发布、调试等)来区分,对于打包部分,我一直在简化假设下操作,即没有包可以混合架构或取决于为不同目标构建的代码。 这种简化到底让我失去了什么?
假设您拥有所有源代码并且可以为本机目标编译,是否需要一个混合架构包?
在 Linux 中,如果不使用任何 hack,无法在 64 位进程中加载 32 位共享库。反之,不能在 32 位进程中加载 64 位库。换句话说,过程是纯粹的;它们是 32 位或 64 位的。虽然设计一个支持混合进程的 Linux OS 在技术上是可行的,但我认为没有这样的 Linux 发行版。
当需要互操作32位和64位二进制文件时,它们应该运行在不同的进程中,然后它们可以通过一些inter-process通信(IPC)机制进行互操作。
因此,如果您认为它可能在同一个包中有多个主要可执行文件,那么有可能(虽然不常见)具有不同位宽的二进制文件,这些二进制文件旨在通过同一个包中的 IPC 进行交互。但即使在这种情况下,也可能有一个主可执行文件(32 位或 64 位)构成整个应用程序的起点。该可执行文件将负责启动其他 32 位或 64 位进程。包含所有这些可执行文件的包可以仅通过该主要可执行文件的体系结构来描述,而忽略包中任何其他可执行文件的目标体系结构。这样做是合理的。