是否存在可以编译可在linux窗口中运行的本机可执行文件的跨平台编译器?可能存在吗?

时间:2010-02-05 02:53:21

标签: windows linux compiler-construction cross-platform

我记得几年前(2002年)有一种多部分病毒可以在linux和windows上本地运行。我不知道编译器是否可以专门制作一个可执行文件,以便它可以作为ELF和PE读取,以便操作系统将在不同的入口点开始执行。或者一个可以合并两个程序的程序,一个是使用mingw编译的,一个是在本机linux中编译的,一个程序。

我不知道这样的程序是否存在,或者它是否存在,我知道这可以用Java或某种脚本语言实现,但这不是本机程序。

想象一下可能性,我可以部署一个带有linux和窗口(可能还有os / x)库的程序,以及一个可以在任何操作系统上运行的主要可执行文件。跨平台支持将弥补更大的规模。

3 个答案:

答案 0 :(得分:2)

没有

Windows和Linux使用截然不同的二进制文件格式。请参阅Portable Executable(Windows)和Executable and Linkable Format(Linux)。

WINE这样的东西会在Linux上运行Windows可执行文件,但这不是一回事。

答案 1 :(得分:2)

Windows程序在开头有一个DOS存根,我刚刚通过debug.com运行了一个ELF可执行文件,它说这个exe的第一条指令是JG 0x147。也许可以用这个来完成......

答案 2 :(得分:0)

出于多种原因,这实际上是一个非常可怕的想法。

  1. 跨操作系统边界的交叉编译非常难以正确执行。
  2. 如果您选择第二条路径(在Windows上构建单独的PE二进制文件,在Linux上构建ELF,然后以某种方式合并它们),则必须维护两台计算机,每台计算机运行不同的操作系统和完整的构建堆栈,并且您需要必须确保在将它们粘合在一起之前单独测试两个版本。
  3. 在Linux上的Windows 上正确管理动态链接已经很痛苦了;静态链接可以生成更难以处理的二进制文件,而不是从向最终用户提供单个文件类型所获得的任何想象中的好处。
  4. 如果你想在多个操作系统上运行相同的二进制可执行文件,你的选择是Java,Mono,还有可能是NativeClient,浏览器插件谷歌正在开发解决“webapps太慢”的问题。