Linker 是否可以在另一个操作系统上运行为一个操作系统构建的可执行文件?

Linker 是否可以在另一个操作系统上运行为一个操作系统构建的可执行文件?,linker,cross-compiling,emulation,wine,objcopy,Linker,Cross Compiling,Emulation,Wine,Objcopy,我知道Wine/Darling和其他兼容层,但我想知道这样做是否可行: 1.在OS X上构建一个简单的hello_world.c程序。 2.使用objcopy/objconv/其他工具,将机器代码复制到Linux可执行文件中,并用对glibc的调用替换对OSX libc的调用。如果它是另一个动态链接到其他OSX库的可执行文件,请复制这些库。 3.在Linux上运行该程序,假设它可以运行。 示例hello\u world.c: #include <stdio.h> int main(v

我知道Wine/Darling和其他兼容层,但我想知道这样做是否可行:
1.在OS X上构建一个简单的hello_world.c程序。
2.使用objcopy/objconv/其他工具,将机器代码复制到Linux可执行文件中,并用对glibc的调用替换对OSX libc的调用。如果它是另一个动态链接到其他OSX库的可执行文件,请复制这些库。
3.在Linux上运行该程序,假设它可以运行。
示例
hello\u world.c

#include <stdio.h>
int main(void) {
    printf("Hello World");
    return 0;
}
#包括
内部主(空){
printf(“你好世界”);
返回0;
}
  • 首先,动态库不是唯一特定于操作系统的部分,启动代码是静态链接的,并且是特定于操作系统X/Linux的
  • OSX二进制文件很有男子气概,Linux需要ELF
  • <> LI>即使是ELF,也有一个ELF标识符需要修补以使Dyn加载器甚至考虑它。
  • 系统调用可能是内联的。(man 2用法),与FD set宏和OS X libc头中的许多其他宏相同
  • 调用约定可能不同(
    • 注册使用
    • 堆栈对齐
    • 在寄存器中传递小结构
  • 在本例中,例如OSX使用AIXABI和Linux SysV。 )

    一般来说,POSIX是一个源代码兼容性概念,而不是二进制概念。所以不,这是不可能的,或者只有在不可行的约束需求下。例外情况是BSD系统上的Linuxator