相关疑难解决方法(0)

Mac OS X 和 Linux 之间的二进制兼容性

振作起来,这个问题可能会显得幼稚和/或愚蠢,因为我对类 Unix 系统的内部工作以及一般的编程比较陌生。

准备好?好的!我会经历大约 3 个可笑的水平,随着我的进行而增加。


我们有两个具有相似硬件的系统(主要是处理器,让我们说一个标准的英特尔核心 2 双核)。

一个正在运行(在此处插入您的 linux 发行版:此后将使用 Ubuntu),另一个正在运行,比如说 Mac OS X。

编译一个等效的程序,让我们这样说:

int main()
{
    int cat = 33;
    int dog = 5*cat;
    return dog;
}
Run Code Online (Sandbox Code Playgroud)

代码非常简单,因为我还不想考虑共享库的含义。

在各自的系统上编译时。输出之间的主要区别不是 ELF 与 Mach-O 的问题吗?如果要剥离格式的每个二进制文件,留下一个平面二进制文件,反汇编的机器指令是不是一样?(根据编译器的习惯/倾向,可能会有一些差异)。

1.)如果要开发一个程序来重新打包从我们的 Ubuntu 系统生成的平面二进制文件,以 Mach-O 格式,它会在 Mac OS X 系统中运行吗?那么,如果只有上面假设程序的编译后的二进制文件,并且有这个用于重新打包平面二进制文件的神秘工具,那么简单的程序是否能够在 Mac OS X 系统上运行?


现在让我们更进一步。

我们现在有一个带有源代码的程序,例如:

#include <stdio.h>
int main()
{
    printf("I like tortoises, but not porpoises");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

2.)假设这个程序被编译并静态链接,我们的神奇程序是否仍然能够以 Mach-O 格式重新打包原始二进制文件并使其在 mac os X 上运行?看到它不需要依赖任何其他二进制文件,(在这种情况下,mac系统不会有)


现在是最后一关;

3.)如果我们使用这个假设的程序将​​所有必需的共享库转换为 Mach-O 格式,然后使用动态链接编译上面的程序会怎样。程序还能成功运行吗? …

linux programming executable

33
推荐指数
2
解决办法
2万
查看次数

标签 统计

executable ×1

linux ×1

programming ×1